Codeigniter 会话在 PHP 7 上不起作用

2022-08-30 17:57:14

我在PHP 5.6上使用codeigniter版本3.0.6,它工作正常。但是当我在PHP 7.1上运行同一个项目时,代码编辑器会话不起作用。我设置了如下会话

$login_session = $this->session->set_userdata("user_session",$session_data);

当我打印$login_session时,它在PHP 7上是空白的


答案 1

最近,我遇到了同样的问题,将我的php版本从5.6升级到7.1,我的开发环境是使用php7.1.4的XAMPP(Apache + MariaDB)

请按照以下步骤操作:

1)转到系统/库/会话/会话.php

2) 通过添加 // 来注释 session_start()。

3)下到312-315左右的行,它说安全是王道,并注释掉以下行:

ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);

4)然后转到您的主索引.php(根索引.php)

5)在顶部添加session_start()一次。

它对我有用。


答案 2

会话 ID 在 php 7.1 中是不同的,并且未通过正则表达式检查。

一个简单的修复:在系统/库/会话/会话中.php第133行

OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])

删除“{40}$”

OR ! preg_match('/^[0-9a-f]/', $_COOKIE[$this->_config['cookie_name']])

问题是会话 ID 从 cookie 中删除,因为正则表达式不匹配。因此,会话 ID 始终会续订。

这可以修复正则表达式并防止它运行行“unset($_COOKIE[$this->_config['cookie_name']]);”

它完全适合我!

仅供参考。在我自己修复后找到它。https://github.com/bcit-ci/CodeIgniter/issues/4830


推荐