I would suggest using mysql to store session data, its really easy to setup, all you have to do is create a table in your database and then include about 5 functions that will change the way PHP natively handles sessions from files to a db. Here are the functions you will need to include on every page you want to use sessions. This way it will be much easier to debug you can just look in the sessions table of your db to see what vars are getting set and which aren't
PHP Code:
<?
########################## session handling crap ###############################
$db = mysql_connect("****", "******", "*******");
mysql_select_db("****");
$sess_lifetime = get_cfg_var("session.gc_maxlifetime");
function sess_open() {
global $db;
return $db;
}
function sess_close() {
return true;
}
function sess_read($key) {
global $db;
$result = mysql_query(sprintf("SELECT value FROM sessions WHERE sesskey = '%s' AND expire > %s", $key, time()));
if (mysql_num_rows($result) > 0) {
$row = mysql_fetch_array($result);
return $row["value"];
}
else {
return false;
}
}
function sess_write($key,$val) {
global $db, $sess_lifetime;
$expire = time() + $sess_lifetime;
$value = addslashes($val);
$result1 = mysql_query(sprintf("UPDATE sessions SET expire = %s, value = '%s' WHERE sesskey = '%s' AND
expire > %s", $expire, $value, $key, time()));
if (mysql_affected_rows($result1) < 1) {
$result2 = mysql_query(sprintf("INSERT into sessions SET sesskey = '%s',
expire = %s, value = '%s'", $key, $expire, $value));
}
return mysql_affected_rows($result2);
}
function sess_destroy($key) {
global $db;
$result = mysql_query(sprintf("DELETE from sessions WHERE sesskey = '%s'", $key));
return mysql_affected_rows($result);
}
function sess_gc() {
global $db, $PHPSESSID;
session_unset();
$result = mysql_query(sprintf("DELETE from sessions WHERE sesskey = '%s'", $PHPSESSID));
return mysql_affected_rows($result);
}
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");
?>
Here is the databvase table schema
Code:
CREATE TABLE sessions (
sesskey varchar(32) DEFAULT '' NOT NULL,
expire int(11) unsigned,
value text,
PRIMARY KEY (sesskey)
);
Bookmarks