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