在学习了一些教程后,我正在使用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();
}
}
但我无法弄清楚为什么它不起作用。
编辑:由于不工作,我的意思是没有任何东西被添加到数据库中。