CodeIgniter 2.1.0的会话库中是否有任何已知错误?我为什么被踢出去?

max*_*max 10 php codeigniter codeigniter-2

我正在使用CodeIgniter 2.1.0创建的网站.

我有时会注意到,当我重新加载页面几次或者非常快地打开几页时,或者当我在代码中出错时(这些错误与会话无关)我会被注销.

本网站使用名为Ion_authand的库进行识别:

public function logged_in()
{
  $identity = $this->ci->config->item('identity', 'ion_auth');
  return (bool) $this->ci->session->userdata($identity);
}
Run Code Online (Sandbox Code Playgroud)

是否有我应该知道的错误或其他内容?

$config['sess_cookie_name']  = 'cisession';
$config['sess_expiration']  = 7200;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name']  = 'cisession';
$config['sess_match_ip']  = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
Run Code Online (Sandbox Code Playgroud)

在这个网站上,会话几乎每页都会更新.

max*_*max 10

这是我发现的:

CodeIgniter的会话库中存在一个错误,它会通过快速请求销毁会话.

在这里您可以找到有关此错误的更多信息

https://github.com/EllisLab/CodeIgniter/issues/154
Run Code Online (Sandbox Code Playgroud)

这个bug仍然存在于最新的稳定版本2.1.3中.

我通过用来自GitHub的CI3-DEV替换我的会话库来解决这个问题:

https://github.com/EllisLab/CodeIgniter/blob/b211adee89f5fd2192051e9c0826146bd150f469/system/libraries/Session.php
Run Code Online (Sandbox Code Playgroud)

在我的配置中加入一个长的sess_expiration和sess_time_to_update ...我的是86400和86500.


vis*_*hal 7

CodeIgniter将会话数据保存在cookie中.如果会话数据具有取消设置cookie的任何特殊字符,则会话也将被销毁.

它还会产生更多的尺寸限制问题.Cookie可以根据浏览器保存有限大小的数据.如果您尝试在CodeIgniter会话中存储更多数据,并且CodeIgniter尝试将其保存在cookie中,则可能无法保存超过该限制.

此外,当cookie通过网络发送时,它会不必要地增加网络上的流量.不应将所有会话数据保存在cookie中.

最好使用本机会话库.它使用PHP的本机会话.

https://github.com/EllisLab/CodeIgniter/wiki/Native-session

要么

https://github.com/EllisLab/CodeIgniter/wiki/PHPSession

你可以比较两者.

有关CodeIgniter如何存储会话数据,请参阅CodeIgniter会话文档.

https://www.codeigniter.com/user_guide/libraries/sessions.html