Codeigniter 2v Session 数据丢失

Codeigniter 2v Session Data Lost

我有一个关于 Codeigniter Sessions 的问题。当我登录到我们的系统时,设置了 Session。在此 session "user_id" 也设置。几次重定向后,我的 "user_id" Session 变量为空(无值)。

然后由于 user_id 的空值,它重定向到登录页面。为什么会出现这个问题?

查看以下config.php文件

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;
$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;
$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;

请帮我解决这个问题。 !

替换

$config['sess_expiration']      = 7200;

$config['sess_expiration']      = 0;

有关会话的更多信息,请阅读此 this and this link

您没有提供太多关于您的应用程序的信息,但如果您在重定向之间有很多 ajax 请求,您可能会遇到经典的 CI 2 错误,其中有一个每当在会话轮换 window 期间发出 ajax 请求时有效地重置用户会话的竞争条件。

CodeIgniter 将会话存储在由 session_id 字段索引的 table 中。这是在会话创建和轮换时随机生成的唯一标识符。 session_id 在每次请求后作为 cookie 发送到浏览器,这会覆盖存储在 cookie 中的任何 session_id。当任何时候客户端和服务器之间只发送一个请求时,该系统在正常操作期间工作得很好。在正常操作期间,相同的 cookie 将在客户端和服务器之间交换。在会话轮换时,服务器会向客户端发送一个新的 cookie,客户端会存储它并在下一个请求时将新的 cookie 重新发送回服务器。这也能正常工作。

当服务器在会话轮换期间同时收到两个请求时(同时被定义为在收到所有其他正在进行的请求之前发送到服务器的请求),不起作用。

This link here 对其进行了详尽的解释,如果您遇到这种情况,那么您可以在那里找到解决方法。

The problem exists because of the way browsers make ajax requests (or at least the way we make ajax requests), and the way CodeIgniter handles session rotation.

PS。它的 Codeigniter 不是 codeignitor :)