【问题标题】:Codeigniter userdata lost after session id refresh [CodeIgniter 3.0]会话 ID 刷新后 Codeigniter 用户数据丢失 [CodeIgniter 3.0]
【发布时间】: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


【解决方案1】:

您的会话不断过期,请更改以下设置:

发件人:

$config['sess_expiration'] = 0;

收件人:

$config['sess_expiration'] = 7200; // expires in 2 hours

【讨论】:

  • 好的,试试那个自动取款机。但在描述中它说:“您希望会话持续的秒数。设置为 0(零)意味着浏览器关闭时过期。”我从来没有关闭过浏览器?
  • 好吧,我试过了,它不起作用:(每 5 分钟它仍然会创建一个新会话。
  • 嘿,我回来了。我明白你现在的意思了。告诉我更多关于你想要的设计的信息。据我了解,您有一个应用程序,您将到期时间设置为 0(以便它在关闭时到期),但是您不断丢失用户数据..您是否丢失了特定页面上的用户数据?还是发生在不同的页面上?
  • 所以我认为问题在于,codeigniter 会话库(出于某种我不知道的原因)每 5 分钟创建一个新会话。它不会重用数据库和其他东西中的那个。每当它创建一个新会话时,所有用户数据显然都会丢失。
  • 是的,那里出了点问题。我在这里尝试使用以下设置$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'] = 30;,但它不会失败。它会刷新,但不会丢失用户数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2013-01-06
  • 2013-01-28
相关资源
最近更新 更多