【问题标题】:codeigniter 3.0-dev dropping sessions randomlycodeigniter 3.0-dev 随机丢弃会话
【发布时间】:2015-06-05 22:03:27
【问题描述】:

这是我继承的一个项目,上面写着:define('CI_VERSION', '3.0-dev');在 CodeIgniter.php 中。这是一个电子商务网站,每隔一段时间就会有客户抱怨他们被注销并且他们的购物车内容被随机清空。这似乎在同一天对同一个客户一遍又一遍地发生,但对其他任何人都没有。几天后,同一客户可能会在同一台机器和浏览器上再次尝试,但完全没有问题。一位客户昨天抱怨了这个问题,我在 ci_sessions 表中发现他们的 IP 地址在同一天有 7 个不同的会话。由于我自己永远无法重现该问题,因此我很难弄清楚。我已经在网上阅读了许多关于 CI 丢弃会话的帖子,并且我已经对我发现的配置值进行了所有建议的更新,希望它会得到修复,只是让另一个客户在几周内再次抱怨完全相同的事情之后。如果您之前遇到过这个问题,也许您可​​以提出其他解决方案?

这是我的一些配置设置:

$config['sess_cookie_name']     = 'pyrocms' . (ENVIRONMENT !== 'production' ? '_' . ENVIRONMENT : '');
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = true;
$config['sess_encrypt_cookie']  = true;
$config['sess_use_database']    = true;
// don't change anything but the 'ci_sessions' part of this. The MSM depends on the 'default_' prefix
$config['sess_table_name']      = 'default_ci_sessions';
$config['sess_match_ip']        = true;
$config['sess_match_useragent'] = true;
$config['sess_time_to_update']  = 300;

$config['cookie_prefix']    = (substr_count($_SERVER['SERVER_NAME'], '.') > 1) ? substr($_SERVER['SERVER_NAME'], 0, strpos($_SERVER['SERVER_NAME'], '.')) . '_' : 'default_';
$config['cookie_domain']    = ($_SERVER['SERVER_NAME'] == 'localhost') ? '' : $_SERVER['SERVER_NAME'];
$config['cookie_path']      = BASE_URI;
$config['cookie_secure']    = false;

$config['global_xss_filtering'] = false;

【问题讨论】:

  • 看起来这些配置设置更改建议没有任何帮助,我想知道这是否与托管有关

标签: php codeigniter session config cart


【解决方案1】:

一位客户昨天投诉了这个问题,我在 ci_sessions 表中发现他们的 IP 地址在同一天有 7 个不同的会话。

这似乎是瓶颈,因为为用户创建了新会话;还会导致取消设置购物车(我猜,购物车是基于 $_SESSION 重新生成/销毁和创建的)。

由于我自己永远无法重现该问题,因此我很难弄清楚。

客户端可能正在使用隐私浏览。尝试从您的浏览器(系统)中清除所有 cookie 以重现它。相关帖子也可能对您有所帮助:Remembering PHP Session Private Browsing

不过,这两条线还是有些模糊的感觉。为什么不将sess_expiration 增加到$config['sess_expiration'] = 60 * 60 * 24;sess_expire_on_close$config['sess_expiration'] = false;

【讨论】:

  • 谢谢,但这些设置似乎没有帮助,它仍然偶尔发生
  • 你检查过日志吗?上面的代码你实现了吗?此外,如果可能,请尝试礼貌地询问客户他的会话体验(他的系统设置、浏览器设置等)。
  • 是的,我尝试了那个代码,这就是我所说的“那些设置”,代码设置了一些设置。哪些日志?阿帕奇? PHP?
【解决方案2】:

尝试设置$config['sess_match_ip'] = "FALSE"

【讨论】:

  • 我在几周前改变了它,但昨天又发生了。
  • 这些设置可能是原因:$config['sess_match_ip'] = true; $config['sess_match_useragent'] = true; CI 会话会检查用户代理和用户当前 IP 是否都与会话中的 IP 匹配,如果是,如果满足其他设置的条件,它将假定它是同一个人,否则,它将取消旧会话(记录用户out) 并创建一个新会话,因为用户将被视为新用户。
  • 这两个设置都设置为 false 好几个星期了,昨天问题又发生了。
  • @EricKittell 您使用的是哪个会话驱动程序?文件还是数据库?检查配置文件中的 $config['sess_driver'] 以确认。
  • 我没有 $config['sess_driver']
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 2011-02-26
  • 2012-05-15
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 2016-04-01
  • 2017-02-04
相关资源
最近更新 更多