我必须在多个子域中工作。突然我无法访问我的所有子域。因为页面重定向时会话数据丢失。此问题发生在我的所有子域中 但是我没有从服务器上进行任何更改。任何人,请帮助我为什么突然出现此问题以及如何解决此问题 我的域名托管在cpanel中。 但是我的代码在本地主机上运行得很好
答案 0 :(得分:0)
我更改了小修改session.php文件
更改代码前:
// Sanitize the cookie, because apparently PHP doesn't do that for userspace handlers
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']])
)
)
{
unset($_COOKIE[$this->_config['cookie_name']]);
}
之后:
我从32改为40
// Sanitize the cookie, because apparently PHP doesn't do that for userspace handlers
if (isset($_COOKIE[$this->_config['cookie_name']])
&& (
! is_string($_COOKIE[$this->_config['cookie_name']])
OR ! preg_match('/^[0-9a-f]{32}$/', $_COOKIE[$this->_config['cookie_name']])
)
)
{
unset($_COOKIE[$this->_config['cookie_name']]);
}
在这种情况下,会话数据是根据Cookie ID加载的。但是cookie id最多为32。但是以前的代码定义为40。当cookie id在33和40之间时,会话数据丢失了
但是,我怀疑的是,自从直播开始两天以来,以前的代码是如何工作的?同时以前的代码仍在我的本地主机上工作吗?
答案 1 :(得分:0)
更新:此问题在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时,我试图通过Google搜索它。
到目前为止,这是我最近一次看到有人用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值,该值由任意字符或混合字符组成集0-9, a-z, _ , -
中的一个。
带有固定正则表达式的代码
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,以彻底解决此问题。