我有一个类,允许我在每个安全请求上重新生成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")
);