RE: Session problems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Here is the complete code from the class... it's just a modified version of
that available from an article on the Zend site

<?

$ses_class = new session();
	ini_set("session.save_handler", "user");
	ini_set('session.gc_maxlifetime', SESSION_LIFETIME * 60);

	/* Change the save_handler to use the class functions */ 
	session_set_save_handler (array(&$ses_class, '_open'), 
                          array(&$ses_class, '_close'), 
                          array(&$ses_class, '_read'), 
                          array(&$ses_class, '_write'), 
                          array(&$ses_class, '_destroy'), 
                          array(&$ses_class, '_gc'));
	/* Start the session */ 
	session_start();

class session 
{ 
    /* Define the mysql table you wish to use with 
       this class, this table MUST exist. */ 
    var $ses_table = "";

    /* Configure the info to connect to MySQL, only required 
       if $db_con is set to 'Y' */ 
    var $db_host = ""; 
    var $db_user = ""; 
    var $db_pass = ""; 
    var $db_dbase = "";
	var $dblink;
	
	function session()
	{ // perform variable assignments
		$this->ses_table = SESSION_TABLE;
		$this->db_host = DB_HOST;
		$this->db_user = DB_USER;
		$this->db_pass = DB_PASS;
		$this->db_dbase = DB_DB_NAME;
	}
	
	function localError($code = '', $message = '', $file = '', $line =
-1, $status = ERROR_STATUS_NOTIFY)
	{ // handle a local error
		global $base;
		if (class_exists('baseClass'))
		{ // use the base class error handler
			$base->errorPush($code, $message, $file, $line,
$status);
		} else {
			die ('<b>Error ' . $code . '</b><br/>' . $message);
		}
	}

    /* Create a connection to a database */ 
    function db_connect() { 
        $this->dblink = @mysql_pconnect ($this->db_host, $this->db_user,
$this->db_pass); 
		if (!$this->dblink)	$this->localError('c1(ses)',
mysql_error(), __file__, __line__, ERROR_STATUS_FATAL);
        $mysql_db = @mysql_select_db ($this->db_dbase);
		if (!$mysql_db)	$this->localError('c1(ses)', mysql_error() .
' - Tried: ' . $this->db_dbase, __file__, __line__, ERROR_STATUS_FATAL); 

        if (!$this->dblink || !$mysql_db) { 
            return FALSE; 
        } else { 
            return TRUE; 
        } 
    } 

    /* Open session, if you have your own db connection 
       code, put it in here! */ 
    function _open($path, $name) { 
        $this->db_connect(); 
        return TRUE; 
    } 

    /* Close session */ 
    function _close() { 
        /* This is used for a manual call of the 
           session gc function */ 
        $this->_gc(0); 
        return TRUE; 
    } 

    /* Read session data from database */ 
    function _read($ses_id) { 
        $session_sql = "SELECT * FROM " . $this->ses_table 
                     . " WHERE ses_id = '$ses_id'"; 
        $session_res = @mysql_query($session_sql, $this->dblink) or die
(mysql_error()); 
        if (!$session_res) { 
            return ''; 
        } 

        $session_num = @mysql_num_rows ($session_res); 
        if ($session_num > 0) { 
            $session_row = mysql_fetch_assoc ($session_res); 
            $ses_data = $session_row["ses_value"]; 
            return $ses_data; 
        } else { 
            return ''; 
        } 
    } 

    /* Write new data to database */ 
    function _write($ses_id, $data) { 
        $session_sql = "UPDATE " . $this->ses_table 
                     . " SET ses_time='" . time() 
                     . "', ses_value='$data' WHERE ses_id='$ses_id'"; 
        $session_res = @mysql_query ($session_sql, $this->dblink) or die
(mysql_error()); 
        if (!$session_res) { 
            return FALSE; 
        } 
        if (mysql_affected_rows ()) { 
            return TRUE; 
        } 

        $session_sql = "INSERT INTO " . $this->ses_table 
                     . " (ses_id, ses_time, ses_start, ses_value)" 
                     . " VALUES ('$ses_id', '" . time() 
                     . "', '" . time() . "', '$data')"; 
        $session_res = @mysql_query ($session_sql, $this->dblink) or die
(mysql_error()); 
        if (!$session_res) {     
            return FALSE; 
        }         else { 
            return TRUE; 
        } 
    } 

    /* Destroy session record in database */ 
    function _destroy($ses_id) { 
        $session_sql = "DELETE FROM " . $this->ses_table 
                     . " WHERE ses_id = '$ses_id'"; 
        $session_res = @mysql_query ($session_sql, $this->dblink) or die
(mysql_error()); 
        if (!$session_res) { 
            return FALSE; 
        }         else { 
            return TRUE; 
        } 
    } 

    /* Garbage collection, deletes old sessions */ 
    function _gc($life) { 
        $ses_life = strtotime("-" . SESSION_LIFETIME . " minutes"); 

        $session_sql = "DELETE FROM " . $this->ses_table 
                     . " WHERE ses_time < $ses_life"; 
        $session_res = @mysql_query ($session_sql, $this->dblink);
		if (!$session_res)	$this->localError('c1(ses)',
mysql_error() . ' - SQL: ' . $session_sql . '<br/><a href="' . WS_SITE_ROOT
. '?action=build">Click here to build session tables (for database)</a>',
__file__, __line__, ERROR_STATUS_FATAL);


        if (!$session_res) { 
            return FALSE; 
        }         else { 
            return TRUE; 
        } 
    } 
}
?>
-----Original Message-----
From: Peter Lauri [mailto:peter@xxxxxxxx] 
Sent: 16 February 2006 12:25
To: dan@xxxxxxxxxxxxxxxxxxx; php-general@xxxxxxxxxxxxx
Subject: RE:  Session problems

What is the code that generates this?

-----Original Message-----
    From: "Dan Parry"<dan@xxxxxxxxxxxxxxxxxxx>
    Sent: 16/02/06 4:50:51 PM
    To: "php-general@xxxxxxxxxxxxx"<php-general@xxxxxxxxxxxxx>
    Subject:  Session problems
    
    Hi all
    
     
    
    I've been getting an error while using a custom session handler
utilising a
    MySQL database
    
     
    
    The error I receive is:
    
     
    
    Duplicate entry '<<PHPSESSID_REMOVED>>' for key 1
    Warning: Unknown(): A session is active. You cannot change the session
    module's ini settings at this time. in Unknown on line 0
    
     
    
    I've contacted my hosting company regarding this but currently they
don't
    seem to know the cause
    
     
    
    I've Googled but I can't find anything I can use
    
     
    
    Thanks in advance :-)
    
     
    
    Dan
    
     
    
    -----------------------------------------------------
    
    Dan Parry
    
    Senior Developer
    
    Virtua Webtech Ltd
    
    http://www.virtuawebtech.co.uk
    
     
    

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux