我正在PHP 5.6上使用codeigniter版本3.0.6,并且工作正常。但是当我在PHP 7.1上运行相同的项目时,codeigniter会话无法正常工作。我像下面这样设置会话
$login_session = $this->session->set_userdata("user_session",$session_data);
当我打印$ login_session时,在PHP 7上为空白
最近,我将php版本从5.6升级到7.1时遇到了同样的问题我的开发环境是XAMPP(Apache + MariaDB),使用php7.1.4
请执行以下步骤:
1)进入系统/库/Session/Session.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)然后转到您的主index.php(根index.php)
5)在顶部一次添加session_start()。
它对我有用。
会话ID在php 7.1中是不同的,并且未通过正则表达式检查。
一个简单的解决方法:在系统/库/Session/Session.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']])
问题在于,由于正则表达式不匹配,因此从cookie中删除了会话ID。因此,会话ID总是会更新。
这可以修复正则表达式并防止其运行该行“ unset($ _ COOKIE [$ this-> _ config ['cookie_name']]);”
完全对我有用!
仅供参考。我自己修复后,找到它。https://github.com/bcit-ci/CodeIgniter/issues/4830
我设法通过执行以下步骤来克服此问题。
我发现问题与早期版本的Codeigniter 3有关,这是他们网站上已经报告的错误。该错误已修复,在最新版本的Codeigniter 3中,不会发生此问题。
如果您已经是错误的版本,请考虑使用最新版本的系统文件夹替换系统文件夹。
找到此答案here
我建议以下步骤:
确保已设置会话保存路径
$config['sess_driver'] = 'files'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_save_path'] = APPPATH . 'cache/session/'; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE;
设置文件夹权限0700
将Codeigniter升级到最新版本。问题已解决。
问题出在您的PHP版本上,PHP 7.1确实不稳定,并且会话存在很多问题。将您的PHP版本更改为7.0,会话将自动开始工作。
您只需要进入application/config/config.php
这个文件并设置会话路径