Codeigniter会话不适用于PHP 7

问题描述 投票:16回答:9

我正在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 codeigniter session
9个回答
36
投票

最近,我将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()。

它对我有用。


14
投票

会话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


10
投票

我设法通过执行以下步骤来克服此问题。


9
投票

我发现问题与早期版本的Codeigniter 3有关,这是他们网站上已经报告的错误。该错误已修复,在最新版本的Codeigniter 3中,不会发生此问题。

如果您已经是错误的版本,请考虑使用最新版本的系统文件夹替换系统文件夹。

找到此答案here


5
投票

我建议以下步骤:

  1. 转到https://www.codeigniter.com,下载框架的最新3.x.x版本并解压缩。
  2. 在现有应用程序中复制系统文件夹,将其保存在其他位置,然后在应用程序文件夹中删除该文件夹。

3
投票

确保已设置会话保存路径

$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


2
投票

将Codeigniter升级到最新版本。问题已解决。


1
投票

问题出在您的PHP版本上,PHP 7.1确实不稳定,并且会话存在很多问题。将您的PHP版本更改为7.0,会话将自动开始工作。


0
投票

您只需要进入application/config/config.php这个文件并设置会话路径

© www.soinside.com 2019 - 2024. All rights reserved.