这是代码,我正在做一个有根据的猜测,即在分配会话var时调用s ess_read
。它正在分配价值。有没有办法测试这个?
function sess_open($sess_path, $sess_name) {
return true;
}
function sess_close() {
return true;
}
function sess_read($sess_id) {
echo "TEST";
$result = mysql_query("SELECT Data FROM sessions WHERE SessionID = '$sess_id';");
if (!mysql_num_rows($result)) {
$CurrentTime = time();
mysql_query("INSERT INTO sessions (SessionID, lastseen) VALUES ('$sess_id', $CurrentTime);") or die(mysql_error());
return '';
} else {
extract(mysql_fetch_array($result), EXTR_PREFIX_ALL, 'sess');
mysql_query("UPDATE sessions SET lastseen = $CurrentTime WHERE SessionID = '$sess_id';");
return $sess_Data;
}
}
function sess_write($sess_id, $data) {
$CurrentTime = time();
mysql_query("UPDATE sessions SET Data = '$data', lastseen = $CurrentTime WHERE SessionID = '$sess_id';");
return true;
}
function sess_destroy($sess_id) {
mysql_query("DELETE FROM sessions WHERE SessionID = '$sess_id';");
return true;
}
function sess_gc($sess_maxlifetime) {
$CurrentTime = time();
mysql_query("DELETE FROM sessions WHERE lastseen + $sess_maxlifetime < $CurrentTime;");
return true;
}
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
session_start();
ini_set('session.gc-maxlifetime', 60);
$_SESSION['foo'] = "bar";
$_SESSION['baz'] = "wombat";
echo $ _SESSION ['baz'];
// ^^^^这会返回wombat,但为什么不调用sess_read
?
编辑
确定首先检查session_get_save_handler
正在使用或die()
然后在调用之前设置session_destroy()
- 这解决了问题。会议已经开始在其他地方包含
答案 0 :(得分:0)
如果您查看 sess_read 函数,可以看到它没有返回您要求的 $ _ SESSION 数组中某个键的值因为,它会读取整个会话内容。
在脚本启动时调用read函数一次,在脚本结束时调用
这两个调用之间的$ _SESSION类似于存储数据的常规数组,但它是超全局(您可以从任何范围访问它)