2

在学习了一些教程之后,我正在使用 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();
    }
}

但我无法弄清楚为什么它不起作用。

编辑:不工作,我的意思是没有任何东西被添加到数据库中。

4

0 回答 0