【问题标题】:PHP/Codeigniter sessions getting destroyedPHP/Codeigniter 会话被破坏
【发布时间】:2013-10-31 04:52:41
【问题描述】:

我目前正在开发一个网络应用程序,用户登录会话被创建并登录到数据库。

正在发生的情况是,用户将被随机注销,而他们自己没有选择。背景故事是,这通常发生在共享帐户的用户身上(不是最好的事情,而是应用程序的性质,这意味着它需要被允许)。

这可能是随机注销的原因吗?还是 CI 中的一些更深层次的东西和在数据库中存储会话?我还读到同时执行大量 AJAX 请求会导致 SESSION ID 更改,然后可能会覆盖数据库记录并将用户注销。这又是一种可能吗?我认为这个不太好,因为我已经写了一个补丁来阻止这种情况发生。

会话配置:

$config['sess_cookie_name']     = 'app';
$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;
$config['sess_use_multisessions'] = TRUE;
$config['sess_multisession_expiration'] = 10;

【问题讨论】:

  • 你为什么不分享你的一些代码?最好分享您的代码以获得对您的问题的最大响应
  • 你想看什么?创建 SESSION 的登录代码?
  • 如果您打开隐身会话并尝试使用同一帐户登录会发生什么?
  • 如果你可以分享隐身会话的处理......
  • 检查配置文件中的session_expiration..确保其值为0。共享配置文件中的会话配置变量

标签: php codeigniter session


【解决方案1】:

对不起,我之前的回答。我错了。我不确定这两个配置设置,也无法在 CI 手册中找到。
$config['sess_use_multisessions'] = TRUE;
$config['sess_multisession_expiration'] = 10;

但是,这不会造成任何问题。

请尝试将 $config['sess_match_useragent'] 设为 TRUE。

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
  • 我已经修改了我的答案。请再次检查我编辑的答案。
【解决方案2】:

您是否将会话存储在数据库中(ci_sessions 表)?尝试将user_agent 的字段类型更改为mediumtext。默认为varchar255,一些用户代理字符串较长,这可能会导致注销。

【讨论】:

    【解决方案3】:

    我已将我的配置设置 $config['sess_time_to_update'] = 300; 更改为 $config['sess_time_to_update'] = 8400;,它的性能比以前更好,这样做您可能会遇到安全问题,因为会话需要很长时间才能更新,并且更新会话 ID 将保持不变。

    更多我也在寻找一个完美的解决方案,我也为 ajax 工作过,就像 stackoverflow 上解释的许多其他线程一样,但这对我不起作用。

    在 DB (ci_sessions table) 中,我还将 user_agent 的字段类型更改为 text,这对我也不起作用。

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2015-07-02
      • 2016-11-15
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多