更新:此问题在 CI v3.1.1 中得到修复。请升级到 >= 3.1.1 以彻底解决此问题。
@prakasht - 我遇到了类似的问题,在寻找修复程序时发现了这个问题。对我来说,它发生在尝试升级 CI v2.2.6 --> v3.0.3
我的会话突然停止工作。我添加了一些日志来调试基于会话文件的驱动程序system/libraries/Session/drivers/Session_files_driver.php中的场景@
在我之前和现在的工作地点都有集中的会话,我发现不知何故,会话是根据我添加的日志为每个请求重新创建的。
作为一个懒惰的人,当我看到你的answer above时,我试图用谷歌搜索。
这是迄今为止我见过的最接近使用 Ci 解决此问题的人,因为其他人只是添加了 hack。我尝试自己调试文件system/libraries/Session/Session.php中的代码,发现清理preg_match()永远不匹配。
在正则表达式中试图检查cookie值试图匹配
if (isset($_COOKIE[$this->_config['cookie_name']])
&& (
! is_string($_COOKIE[$this->_config['cookie_name']])
OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
)
)
我尝试将我的 cookie 值与正则表达式 ^[0-9a-f]{40}$ 匹配,但发现它失败了。因此,按照文件application/config/config.php 中的定义,我将正则表达式更改为^[0-9a-z_-]{1,40}$,这基本上意味着正则表达式可以匹配长度为1 - 40 的任何cookie 值,包括任何一个字符或集合@987654331 的组合@。
带有固定正则表达式的代码
if (isset($_COOKIE[$this->_config['cookie_name']])
&& (
! is_string($_COOKIE[$this->_config['cookie_name']])
OR ! preg_match('/^[0-9a-z_-]{1,40}$/', $_COOKIE[$this->_config['cookie_name']])
)
)
这为我解决了问题。希望它对你也一样。
P.S.:我也替换了
的所有实例
$this->session->all_userdata() 和 $this->session->userdata()
和
$this->session->set_userdata($key, $value) 和$this->session->key = $value
根据CI 2.2.x -> 3.x upgrade documentation 和Session library documentation 在我的代码库中
更新:此问题在 CI v3.1.1 中得到修复。请升级到 >= 3.1.1 以彻底解决此问题。