I am testing user-handling of sessions (mysql database) and just do not understand this behavior. my SESSION table is created as
CREATE TABLE SESSION ( id varchar(32) NOT NULL default '', time timestamp(14) NOT NULL, user_id mediumint(8) NOT NULL default '-1', data text NOT NULL, PRIMARY KEY (id) ) TYPE=MyISAM; I have a main script index.php3 <?php require("./sessions.inc"); session_module_name("user"); session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_remove", "sess_gc"); session_start(); if (!isset($_SESSION['zzzz'])) { $_SESSION['zzzz'] = 1; print("<br>zzzz set" ); } function increment() { $_SESSION['zzzz']++; echo "<br>zzzz=".$_SESSION['zzzz']."<br>"; } function set_yyyy() { echo "set yyyy<br>"; $_SESSION['yyyy'] = 666; } if (isset($_POST['MYVAR'])) set_yyyy(); else increment(); echo "<a href=\"$PHP_SELF\">$PHP_SELF increment zzzz</A><br>"; echo "<a href=\"$PHP_SELF?MYVAR=3\">$PHP_SELF register yyyy</A>"; ?> and sessions.inc: <?php function session_table() { return("SESSION"); } function session_log($message) { if($file = fopen("/tmp/session.txt", "a")) { fwrite($file, date("Y-m-d H:i:s ") . $message . "\n"); fclose($file); } } function sess_open($path, $name) { session_log("session_open"); return(true); } function sess_close() { session_log("session_close"); return(true); } function sess_read($id) { session_log("session_read"); $db = mysql_pconnect('localhost','mysqluser','password'); if(!mysql_select_db('rfox_auth')) { session_log("session_read select database error: " . mysql_error()); return(""); } $sql = "select * from " . session_table() . " where id='" . $id . "'"; if(!$result = mysql_query($sql)) { session_log("MySQL error: " . mysql_error() . " with SQL: " . $sql); return(""); } if(mysql_num_rows($result)) { session_log("MySQL query returned " . mysql_num_rows($result) . " rows."); $row = mysql_fetch_assoc($result); session_log("session_read returned " . $row["data"]); return($row["data"]); } else { session_log("session_read found zero rows with SQL: " . $sql); return(""); } } function sess_write($id, $data) { session_log("session_write"); if(!mysql_select_db('rfox_auth')) { session_log("session_write select database error: " . mysql_error()); return(false); } $sql = "update " . session_table() . " set data = '" . addslashes($data) . "', time = null"; $sql .= " where id='" . $id . "'"; if (!$result = mysql_query($sql)) { session_log("session_write error " . mysql_error() . " with SQL: " . $sql); return(false); } if (mysql_affected_rows()) { session_log("session_write update affected " . mysql_affected_rows() . " rows with SQL: " . $sql); return(true); } session_log("session_write updated zero rows with SQL: " . $sql); $sql = "insert " . session_table() . " set data = '" . addslashes($data) . "', id = '" . $id . "'"; if(!$result = mysql_query($sql)) { session_log("session_write error " . mysql_error() . " with SQL: " . $sql); return(false); } else { session_log("session_write inserted with SQL: " . $sql); return(true); } } function sess_remove($id) { session_log("session_remove"); if(!mysql_select_db('rfox_auth')) { session_log("session_remove select database error: " . mysql_error()); return(false); } $sql = "delete " . session_table() . " where id='" . $id . "'"; if ($result = mysql_query($sql)) { session_log("MySQL query delete worked."); return(true); } else { session_log("MySQL update error: " . mysql_error() . " with SQL: " . $sql); return(false); } } function sess_gc($life) { session_log("session_gc"); if (!mysql_select_db('rfox_auth')) { session_log("session_gc select database error: " . mysql_error()); return(false); } $sql = "delete from " . session_table() . " where time < '" . date("YmdHis", time() - $life) . "'"; session_log("session_gc sql: " . $sql); if ($result = mysql_query($sql)) { session_log("session_gc deleted " . mysql_affected_rows() . " rows."); return(true); } else { session_log("session_gc error: " . mysql_error() . " with SQL: " . $sql); return(false); } } ?> I can see in the log file that session_write() is executed when I register zzzz. But there is a problem: PROBLEM: When I register yyyy, there is no call to session_write() in the log file, and no data for yyyy gets written to the database. Can you duplicate this behavior on your system? Do you have an explanation? Thanks! Rich