Re: session_set_save_handler problem

From: Date: Thu, 06 Mar 2003 23:28:49 +0000
Subject: Re: session_set_save_handler problem
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-138541@lists.php.net to get a copy of this message
AHA! I found the problem: session_expiration is an unsigned int(11) field type and so session_expiration > now() always results in no match, even when it should be in the on_session_read() function. ...now i need to make sure, that the now() gets the same value type, right? ...any ideas? Thanks, Duncan Duncan wrote:
Hi, i just tried the session_set_save_handler script from Sterling Hughes "PHP Cookbook", which allows to save the session in a MySQL database. However, i ran into a problem: The script works just fine and also saves the session in the database, but it doesn't update the value of the saved data. I browsed google for additional examples, but only to find out, that the exact same problem appeared. So, my guess is, that my script has some kind of logical error, but i am unable to spot it. Any help is more than welcome (regarding my starting headache ;) ) Here is the script: If the session_set_save_handler function is commented (as seen below), then the script starts the session and continues to display the increasing $counter variable with every page reload. However, once you uncomment the session_set_save_handler function, the session gets saved in the MySQL database, but the counter variable won't increase and always stays at "1". (as i said, i tried this with several scripts already, but all resulted in the same problem) So, i think the problem is either in the on_session_write() part, where the value doesn't increase, or -as already pointed out- i am having a logical error with the $counter variable. ...just to clarify: $counter++; also means that it should be increased in the MySQL database, right? Or would i have to do s.th. else to update the session values in the MySQL database? The script: <? function on_session_start($save_path, $session_name) {
    // nothing
} function on_session_end() {
        // nothing
    }
function on_session_read($key) {
    $db = mysql_connect(DB_HOST,DB_USER,DB_PASS);
    mysql_select_db(DB_DATABASE);
    if ($db)
    {
        $query = mysql_query('SELECT session_data FROM sessions WHERE
session_id="'.$key.'" AND session_expiration > now()');
        $row = mysql_fetch_row($query);
    }
    return $row[0];
    mysql_close();
} function on_session_write($key, $val) {
        $val = addslashes($val);
    $db = mysql_connect(DB_HOST,DB_USER,DB_PASS);
    mysql_select_db(DB_DATABASE);
    if ($db)
    {
        $query = mysql_query('INSERT INTO sessions VALUES("'.$key.'",
"'.$val.'", now() + 3600)');
        if (!$query)
            $queryb = mysql_query('UPDATE sessions SET session_data="'.$val.'",
session_expiration=now()+3600 WHERE session_id="'.$key.'"');
        if (!$queryb)
            die(sprintf("$val - $key"));
    }
    mysql_close();
} function on_session_destroy($key) {
    $db = mysql_connect(DB_HOST,DB_USER,DB_PASS);
    mysql_select_db(DB_DATABASE);
    if ($db)
    {
        mysql_query('DELETE FROM sessions WHERE session_id="'.$key.'"');
    }
    mysql_close();
} function on_session_gc($max_lifetime) {
    $db = mysql_connect(DB_HOST,DB_USER,DB_PASS);
    mysql_select_db(DB_DATABASE);
    if ($db)
    {
        mysql_query('DELETE FROM sessions WHERE session_expiration < now()');
    }
    mysql_close();
} /* session_set_save_handler('on_session_start', 'on_session_end',
                         'on_session_read',    'on_session_write',
                         'on_session_destroy', 'on_session_gc');
*/ session_start(); session_register('counter'); $counter++; print $counter; //session_destroy();
                       ?>


« previous php.general (#138541) next »