我有一种情况,我需要将信息存储到codeigniters会话中 - >能够关闭浏览器窗口 - >然后打开浏览器窗口并恢复我在会话中存储的所有项目。我知道codeigniter实际上并没有使用会话而是cookie,所以这应该很容易......但事实并非如此。
在FF / Safari / Chrome中,这种方法很好但在IE 9中,当我关闭然后重新打开窗口时,它会重新生成会话ID并且不会撤回数据。
例如这个简单的代码:
$this->CI->session->set_userdata('username','My Username');
echo $this->CI->session->userdata('username');
按预期运行第一次输出时。然后我注释掉第1行并刷新屏幕,会话数据再次正确显示。
现在我关闭浏览器窗口并将其重新打开到同一页面,再次注释掉第1行。它找不到会话数据,会话ID现在已更改。
我将会话保存到codeigiter中的数据库,我的会话配置如下:
$config['sess_cookie_name'] = 'bcsession';
$config['sess_expiration'] = 0;
$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'] = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 300;
有谁知道如何解决这个问题,因为它让我疯了!
答案 0 :(得分:3)
您需要设置config.php:
$ config ['sess_expiration'] =写秒数
这是您希望会话持续的秒数。默认值为2小时(7200秒)。如果您希望非过期会话将值设置为零:0。
$ config ['sess_expire_on_close'] = TRUE;
是否在浏览器窗口关闭时自动使会话过期。 FALSE是默认值,但您需要更改。
有关详情,请详细阅读:http://www.codeigniter.com/userguide2/libraries/sessions.html
非常感谢
答案 1 :(得分:1)
我已经找到了解决方法,以防万一其他人受到影响。
CI会话实际上是我的逻辑,但我不相信我没有发现它,但IE有退出时删除浏览器历史记录/ cookie /缓存的设置。这是票。
为什么你总是首先看最复杂的原因,而不是最明显的原因!
答案 2 :(得分:0)
我相信sess_expiration
可能需要非零值才能解决您的问题。试试这个,删除你在数据库表中的会话,再给它一个镜头。
来自Is possible to keep session even after the browser is closed?:
使用session_set_cookie_parameters()在会话开始前为会话cookie提供非零生命周期,或将session.cookie_lifetime设置为非零。
Codeigniter将在$config['sess_expiration']
上调用该函数,因此请尝试将其设置为非零值。