【发布时间】:2015-04-20 01:58:44
【问题描述】:
我在连接到 MySQL 数据库的网站上使用 Codeigniter 的会话库。 我有自己的库,可以与创建的会话一起使用以处理登录检查。
基本上,当我登录时,我会将我已登录的信息存储在会话 cookie 的用户数据中。 (然后还有其他检查具有某种安全性)
$this->session->set_userdata('logged_in','1');
现在,一旦会话 ID 被刷新(标准 300 秒),我的所有用户数据都消失了。我检查了数据库,并且会话 ID 没有得到更新,它只是创建了一个新的。
我正在使用 Codeigniter 3.0,但我不确定这是否应该像那样工作。
编辑:
我的 config.php(会话内容)
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
饼干的东西
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
基本上会发生以下事情:
我获得了 ID 为 123 的会话。我将 userdata logged_in = 1 分配给会话。 全部保存在数据库中。 5分钟后。 (或者配置文件中定义的时间)
$config['sess_time_to_update'] = 300;
我在浏览器中获得了一个 ID 为 137 且没有用户数据的新会话。 userdata logged_ind = 1 的 Session 123 和新创建的 Session 137 仍在数据库中。
因此,与其更新“sess_time_to_update”,不如创建一个新会话。
【问题讨论】:
-
您能否提供在
config.php中找到的会话设置? -
在
application/config/config.php文件中查看sess_expiration的值 -
根据此处:codeigniter.com/userguide3/libraries/…“如果会话 cookie 不存在(或者如果它与存储在服务器上的 cookie 不匹配或已过期),则将创建并保存一个新会话。”所以如果 cookie 有问题,它应该是一个新的会话而不是更新。如果您只想更改到期时间,请跟随@SolarBear 的引导。但是,如果您需要特定的内容,我建议您编写自己的会话类。
-
@CodeGodie 我编辑了这篇文章。 Süha Boncukçu 没错,但会话 id 仍然存在于数据库中(我仔细检查过,为什么它会创建一个新的?)
标签: php mysql codeigniter session