php - Codeigniter 3.1.11 - 会话重新生成和数据丢失 PHP 7.3.11
问题描述
我在我的本地主机上使用 Codeigniter 3.1.11 和 XAMPP PHP 版本 7.3.11。我正在使用数据库会话,而不是文件。
我编写了一些简单的代码来将用户购物车数据放入会话中。在初始表单提交时,数据被放入会话中并且看起来不错。一次刷新,会话重新生成,之前的会话数据在新会话中不存在,但在旧会话中仍然存在。以下是我的配置设置。我尝试了很多组合,但无法弄清楚问题所在。
初始会话数据看起来不错:
Array
(
[__ci_last_regenerate] => 1576165611
[CART] => Array
(
[0] => Array
(
[product_id] => XYZ1234567
[qty] => 1
)
)
)
在页面刷新时,我回显 $this->Session->all_userdata() 并收到:
Array
(
[__ci_last_regenerate] => 1576124405
)
每次刷新都会生成一个新数字。
配置设置
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_sessions';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix'] = 'card_';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
我将向提供有效解决方案的人支付 10 美元。
解决方案
我通过从另一个线程中应用解决方案来部分工作,其中在检查 cookie 时 REGEX 不正确。但是,这仅部分有效或有时有效。这个逻辑并不总是被执行,所以我认为标准 CI 会话代码中还有一个地方也需要更改。
\system\libraries\session\Session.php
//Line 136 changed by me on 12.15.2019 -mb
//OR ! preg_match('#\A'.$this->_sid_regexp.'\z#', $_COOKIE[$this->_config['cookie_name']])
OR ! preg_match('/^[0-9a-f]/', $_COOKIE[$this->_config['cookie_name']])
推荐阅读
- c# - 通过 ftp 将 asp net core 3.1 应用程序部署到 azure
- marklogic - 从 Nifi 摄取到 MarkLogic Data Hub 时设置标头
- xml - 适合文献研究的数据库
- amazon-web-services - 如何将 ECSCredentials 与 AWS 开发工具包一起使用?
- python - Pandas Q-cut:使用扩展窗口方法对数据进行分箱
- debugging - QTCreator“开始调试”在 WSL Ubuntu 18.04 LTS 中挂起
- odoo - 如何在 Odoo 上仅显示和保存一个值?
- vue.js - 如何在 Vue 和 Quill 中使用 href
- oracle-sqldeveloper - SQL Developer 未打开首选项中设置的特定文件夹路径
- r - 将年份向量转换为具有范围间隔的单个字符串