在浏览器关闭后重新生成Codeigniter会话

时间:2013-06-06 16:39:39

标签: session codeigniter-2

我有一种情况,我需要将信息存储到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;

有谁知道如何解决这个问题,因为它让我疯了!

3 个答案:

答案 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']上调用该函数,因此请尝试将其设置为非零值。