我将会话存储在 MySQL 数据库中。
我有一个具有多种功能的 SessionManager 类。但是,在课堂的某个地方,我的数据库类正在被卸载,我似乎无法找出原因。
我使用以下方法测试了该类是否存在:
echo (class_exists('database') === TRUE ? 'Yes' : 'No');
这是产生致命错误的函数,告诉我database
找不到该类。请注意,上面的测试在测试所在的位置返回 true,__construct
并且在此方法中特别失败:
public static function writeSession($sessionId, $sessionData)
{
$sessionId = session_id();
session_write_close();
session_id($sessionId);
$expiry = time() + ini_get('session.gc_maxlifetime') - 1;
$sessionId = database::getInstance()->real_escape_string($sessionId);
$sessionData = database::getInstance()->real_escape_string($sessionData);
$result = database::getInstance()->query("SELECT sessionid FROM sessions WHERE sessionid='$sessionId'");
($result->num_rows > 0) ?
database::getInstance()->query("UPDATE sessions SET sessionid='$sessionId',expiry='$expiry',sessiondata= '$sessionData' WHERE sessionid='$sessionId'")
: database::getInstance()->query("INSERT INTO sessions (sessionid,expiry,sessiondata) VALUES ('$sessionId','$expiry','$sessionData')") ;
}
即使我尝试实例化一个新的数据库对象,也找不到该类,就好像它消失了一样。
该课程有效,并且在以前的方法中很好:
public static function readSession($sessionId)
{
$sessionId = session_id();
$sessionId = database::getInstance()->real_escape_string($sessionId);
$time = time();
$result = database::getInstance()->query("SELECT sessiondata FROM sessions WHERE sessionid='$sessionId' AND expiry > $time");
if ($result->num_rows > 0) {
$row = $result->fetch_array();
return $row['sessiondata'];
}
return "";
}
谁能看到这里发生了什么?