重定向页面时突然删除会话数据

时间:2019-02-07 06:32:39

标签: php codeigniter session cpanel

我必须在多个子域中工作。突然我无法访问我的所有子域。因为页面重定向时会话数据丢失。此问题发生在我的所有子域中    但是我没有从服务器上进行任何更改。任何人,请帮助我为什么突然出现此问题以及如何解决此问题    我的域名托管在cpanel中。    但是我的代码在本地主机上运行得很好

2 个答案:

答案 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 documentationSession library documentation

在我的代码库内部

更新:此问题在CI v3.1.1中已得到解决。请升级到> = 3.1.1,以彻底解决此问题。