いくつかのチュートリアルに従った後、session_set_save_handler のクラスを使用して、セッション データを mysql データベースに保存しようとしています。
クラスファイルが含まれており、次のようにインスタンス化されています。
$sess = new SessionHandler();
私のクラスファイルのコードは次のとおりです。
class SessionHandler
{
function __construct()
{
session_set_save_handler
(
array(&$this, 'open'),
array(&$this, 'close'),
array(&$this, 'read'),
array(&$this, 'write'),
array(&$this, 'destroy'),
array(&$this, 'clean')
);
session_start();
ini_set('session.gc-maxlifetime', 1800);
if (!isset($_SESSION['user_sess_time']))
{
$_SESSION['user_sess_time'] = time();
}
elseif (time() - $_SESSION['user_sess_time'] > 1800) // 30 mins
{
session_regenerate_id(TRUE);
$_SESSION['user_sess_time'] = time();
}
}
function open()
{
$this->db = new PDO("mysql:host=localhost;dbname=mvc", 'root','root');
}
function close()
{
return $this->db = NULL;
}
function read($id)
{
$stmt = $this->db->prepare('SELECT * FROM sessions WHERE id = :id');
$stmt->execute(array(':id' => $id));
if ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
return $data = $row['data'];
}
else
{
return '';
}
}
function write($id, $data)
{
$access = time();
$stmt = $this->db->prepare('REPLACE INTO sessions VALUES (:id, :access, :data)');
$stmt->execute(array(':id' => $id, ':access' => $access, ':data' => $data));
}
function destroy($id)
{
$stmt = $this->db->prepare('DELETE FROM sessions WHERE id = :id');
$stmt->execute(array(':id' => $id));
}
function clean($max)
{
$old = time() - $max;
$stmt = $this->db->prepare('DELETE FROM sessions WHERE access < :old');
$stmt->execute(array(':old' => $old));
}
function __destruct()
{
session_write_close();
}
}
しかし、なぜそれが機能しないのかわかりません。
編集:動作しないということは、データベースに何も追加されていないことを意味します。