Riscrivo lo script in modo più semplice e chiaro:
Codice PHP:
<?php
ini_set('display_errors',true);
// ************************************************************
// DATABASE
// ************************************************************
function connect() {
mysql_connect("localhost", "root", "XXX")
or die("Could not connect: " . mysql_error());
mysql_select_db("TEST");
}
// ************************************************************
// CALLBACK session_set_save_handler
// ************************************************************
function open($savePath, $sessionName) {
return true;
}
function close() {
return true;
}
function read($id) {
connect();
$result = mysql_query("SELECT data FROM Sessions WHERE id='$id';");
$data = serialize(array());
while($row = mysql_fetch_array($result))
$data = serialize($row["data"]);
mysql_query("UPDATE Sessions SET creationDate=".time()." WHERE id='$id';");
$_SESSION = unserialize($data);
return true;
}
function write($id, $data) {
connect();
$result = mysql_query("SELECT id FROM Sessions WHERE id='$id';");
$b = false;
while($row = mysql_fetch_array($result))
$b = true;
if($b) return mysql_query("UPDATE Sessions SET creationDate=".time().", data='$data' WHERE id='$id';");
return mysql_query("INSERT INTO Sessions (id, creationDate, data) VALUES ('$id',".time().",'$data');");
}
function destroy($id) {
connect();
return mysql_query("DELETE FROM Sessions WHERE id='$id';");
}
function gc($maxlifetime) {
connect();
return mysql_query("DELETE FROM Sessions WHERE Sessions.creationDate + $maxlifetime < ".time().";");
}
// ************************************************************
// SESSION START
// ************************************************************
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
// ************************************************************
// SESSION TEST
// ************************************************************
if(isset($_SESSION['test'])) {
echo 'SESSION = '.$_SESSION.'
';
echo 'sessione GIA settata '.$_SESSION['test'].'
';
} else {
echo 'SESSION = '.$_SESSION.'
';
echo 'sessione NON settata
';
$_SESSION['test'] = "TEST";
}
?>
Sul DB ho la tabella Sessions così strutturata:
codice:
id (VARCHAR 32) -> id sessione
creationDate (INT 11) -> timestamp ultima modifica
data (BLOB) -> contenuto sessione