PHP CodeIgniter Session ID 未重新生成



我遇到会话ID无法重新生成的问题。这是我的配置

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 60; // 15 minutes
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 30; // 5 minutes
$config['sess_regenerate_destroy'] = TRUE;

我将其设置为非常短的实验时间范围。当我注册用户时,我设置了一个名为user_id的会话变量,然后加载不同的页面。注册时,会话变量的输出为

[code]session_id() = kvrphe8... 
timestamp (from ci_sessions) = 1523413499
user_id = user87B...

如果我等待正好 40 秒,然后通过 ajax 查询这些相同的变量(无需重新加载页面(,我得到

session_id() = kvrphe8... 
timestamp (from ci_sessions) = 1523413499
user_id =user87B...

为什么会话 ID 在 30 秒后没有重新生成?如果我等待超过 60 秒,会话将按预期销毁,并且 session_id(( 会发生变化。但是在这种情况下,它不应该每 30 秒更改一次吗?我还希望会话在 30 秒内被销毁,因为 sess_regenerate_destroy = TRUE,但这显然也没有发生。

谢谢

$this->load->library('session');
if (($this->userdata['last_activity']+30) >= $this->now)
{
 $this->session->sess_regenerate();
}

您必须使用上述函数重新生成。

调用 session_id(( 意味着只获取会话 ID 而不重新生成。

您所看到的是因为 CodeIgniter 在 AJAX 服务器请求期间不会重新生成会话。

这是有道理的,因为当前在浏览器中的页面没有被"重新加载",如果会话 ID 要更改,这将是必需的。更改会话 ID 意味着加载页面时发送的会话 Cookie 将不再有效。

查看 system/Session.php 中的类构造函数,您将看到(在调用 session_start(); 之后(在发出 ajax 请求时未完成会话重新生成。

最新更新