【发布时间】:2015-06-28 12:09:52
【问题描述】:
我已将这个问题发布到 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 用于这个请求之王?难道我做错了什么? 任何帮助表示赞赏。 谢谢
【问题讨论】:
标签: php ajax session codeigniter-3