如何使用session_write_close在PHP中写入数据库?

时间:2014-06-08 23:41:09

标签: php session

我有一个类,允许我在每个安全请求上重新生成session_id。但是,我试图保持前一个会话“新生成的会话之前的会话”活动仅15秒,以处理任何ajax请求.....而且,我将会话信息存储到数据库而不是服务器的文件系统。

为了做到这一点,我必须像这样设置会话值

$_SESSION['OBSOLETE'] = true;
$_SESSION['EXPIRES'] = time() + 15;
然后在那之后我 session_regenerate_id(假); 就在我开始使用新ID的新会话之前,我关闭了上一个会话

session_write_close();

我遇到的问题是OBSOLETE和EXPIRES值没有设置到数据库中。 问题:如何让session_write_close()函数将该数据存储到数据库中?如果它应该自动将数据存储在数据库中,那么我做错了什么是不允许系统将数据存储到数据库中。

session_write_close()的PHP手册中,它指出此函数会写入会话数据并关闭会话。但它没有提及将数据作为选项存储在数据库中的任何内容。

这是我的函数,它重新生成一个新会话并写入并关闭上一个会话

public function regenerateSession(){

    // Set current session to expire in 15 seconds
    $_SESSION['OBSOLETE'] = true;
    $_SESSION['EXPIRES'] = time() + 15;

    //Create new session without destroying the old session. The old one should stay available for the next 15 seconds to allow any AJAX request to process
    session_regenerate_id(false);
    session_write_close();

    // Grab current session ID and close both sessions to allow other scripts to use them
    $newSession = session_id();

    // Set session ID to the new one, and start it back up again
    session_id($newSession);

    session_start();

    // Now we unset the obsolete and expiration values for the session we want to keep
    unset($_SESSION['OBSOLETE']);
    unset($_SESSION['EXPIRES']);
}

这是我初始化脚本以将会话存储到数据库中的方法

//set the session storage to point custom method
session_set_save_handler(
    array($this, "open"),
    array($this, "close"),
    array($this, "read"),
    array($this, "write"),
    array($this, "destroy"),
    array($this, "garbageCollector")
);

0 个答案:

没有答案