【发布时间】:2013-12-19 17:29:18
【问题描述】:
在我的系统中使用一段时间(25 分钟 - 1.5 小时)后,用户体验到了刺激。出于某种原因,我的课程有点像染色。我认为客户端的cookie不知何故丢失了会话ID并创建了一个新的。我将会话数据保存在Database。
这是我的会话配置:
$config['sess_cookie_name'] = 'v2Session';
$config['sess_expiration'] = 32400; //session will be 9 hours, for a shift.
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
现在,当我查看数据库时,我看到每个用户都有多个会话。每次踢都意味着一个新会话,并且旧会话在过期之前不会被删除。当会话“分离”时,用户需要再次登录。
任何解决此问题的帮助将不胜感激。
编辑:
因此,经过一些研究,我注意到会话终止是因为保存在 cookie 中的 session_id 和保存在 database 中的 session_id 不匹配。我怀疑当用户在不同的选项卡/窗口上加载 2 个页面时会发生这种情况。仅当会话更新session_id 时发生一次加载,而第二次加载(终止会话)使用旧的session_id。系统在database 中查找会话,但没有找到。 结果:踢出系统+疯狂用户。
有人经历过吗?有没有人知道如何解决这个问题?
【问题讨论】:
-
既然您将
sess_match_ip设置为true - 您是否检查过他们的IP 是否仍然相同? -
我同意@CBroe - 我会将 sess_match_ip 更改为 false。我总是把它当作假的,我从来没有遇到过这种问题。您的大多数用户几乎肯定会使用动态 IP 地址(如果他们通过移动设备访问更是如此),因此您不应依赖匹配 IP 地址。
-
@CBroe - 我最近更改了
sess_match_ip以尝试解决这个问题。 @Matthew - 这是一个办公应用程序,我的大多数用户(90%)都在使用静态 IP。 -
您是否尝试过调试 CI_Session 类,或启用日志记录以查看 CI 是否有意启动新会话?如果是这样,您可能会从那里回溯以找出发生了什么。
标签: php codeigniter session