セッションを 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 "";
}
誰でもここで何が起こっているか見ることができますか?