我已将这个问题发布到 CI 论坛但没有任何答案,所以我在这里尝试。
我正在将 CI 用于提供来自单页应用程序的 JSON 调用的 REST API。在 CI 2.x 中,在短时间内请求“链”的情况下,会话 ID 重新生成存在问题,而其中一些请求更改了会话 ID。我希望 CI 3 及其全新的会话库能够修复它。
我升级到 3.0,仔细阅读会话文档并做了一些测试。从我的角度来看,CI 2.x 中出现的问题在 3.0 中仍然存在。
让我通过一个http请求的例子来解释一下(实际上是从一个真实的应用程序中观察到的):
会话 ID 不变:
GET ... Request cookies: ci_session=123,
Response cookies:
GET ... Request cookies: ci_session=123,
Response cookies:
...
会话 ID 将被重新生成:
GET ... Request cookies: ci_session=123,
Response cookies: ci_session: <deleted>, ci_session: 456
这个请求比前一个返回的请求开始得早,所以它带有旧的会话 ID:
GET ... Request cookies: ci_session=123,
Response cookies:
但是会话 ID 123 不再有效,因此该请求被视为未通过身份验证。
似乎,添加到新会话库中的锁定并不能阻止这一点。
我的会话配置是:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = <some path>
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 60;
$config['sess_regenerate_destroy'] = TRUE;
我在初始请求身份验证后使用 session_write_close() 。
有没有办法将 CI 3 用于这个请求之王?难道我做错了什么?任何帮助表示赞赏。谢谢