重定向页面时突然会话数据被破坏
Posted
技术标签:
【中文标题】重定向页面时突然会话数据被破坏【英文标题】:Suddenly Session datas destroyed when redirect page 【发布时间】:2019-07-01 05:28:58 【问题描述】:我必须在多个子域中工作。突然我无法访问我的所有子域。因为页面重定向时会话数据丢失了。这个问题发生在我的所有子域中 但我没有从我的服务器上改变任何东西。任何人,请帮助我为什么突然发生此问题以及如何解决此问题 我的域托管在 cpanel 中。 但我的代码在 localhost 中完美运行
【问题讨论】:
也许您将会话 cookie 设置为仅对***域有效? 如何检查会话cookie是否只是***域?但是从昨天开始所有域都运行良好。但是突然发生了这个问题。假设我只设置了***域的会话 cookie,那么从昨天开始所有域都运行良好。 你说得对,如果是昨天的问题,它就不会起作用。 看不懂你的回答,请简单解释一下 我同意你说的。 【参考方案1】:更新:此问题在 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 以彻底解决此问题。
【讨论】:
【参考方案2】:我更改了小修改 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 之间时。会话数据丢失
但我的疑问是之前的代码在 2 天前的 live 中如何运行良好?同时以前的代码仍在我的本地主机中工作?
【讨论】:
以上是关于重定向页面时突然会话数据被破坏的主要内容,如果未能解决你的问题,请参考以下文章