CI3.0.6测试服务器登录重定向后Session丢失问题求助
问题排查与解决方案
核心问题梳理
测试服务器(PHP 7.4)上基于CodeIgniter 3.0.6开发的系统,使用database类型Session驱动时出现异常:用户登录重定向至首页后Session丢失(变为null),且ci_sessions数据表无任何数据写入。但本地同版本PHP环境、生产环境(PHP 7.0)均正常运行。已尝试开启session.auto_start、修改Session类代码,均未解决问题。
针对性排查与修复步骤
还原错误修改,恢复基础配置
- 把
php.ini中session.auto_start改回0:CI自身会接管Session生命周期,开启自动启动会导致框架Session初始化逻辑冲突,直接破坏数据写入流程。 - 恢复
Session.php中的代码:将修改的ini_set('session.id', $params['cookie_name']);改回原代码ini_set('session.name', $params['cookie_name']);,session.id是Session的唯一标识,强制覆盖会导致Session完全失效,这是核心错误操作。
- 把
验证数据库Session配置与表结构
- 检查
config.php中Session相关配置:- 确认
$config['sess_save_path']值与数据表名ci_sessions完全一致 - 若测试服务器存在反向代理,需将
$config['sess_match_ip']设为FALSE,否则IP匹配失败会导致Session无法读取 - 核对
$config['cookie_domain']、$config['cookie_path']是否适配测试服务器域名,空值时需确认无跨域Cookie丢失问题
- 确认
- 检查
ci_sessions表结构:PHP 7.4对IP字段长度要求更高,需确保ip_address字段长度为45(兼容IPv6),原15位长度会导致写入失败,标准表结构如下:CREATE TABLE IF NOT EXISTS `ci_sessions` ( `id` varchar(128) NOT NULL, `ip_address` varchar(45) NOT NULL, `timestamp` int(10) unsigned DEFAULT 0 NOT NULL, `data` blob NOT NULL, KEY `ci_sessions_timestamp` (`timestamp`) );
- 检查
排查权限与日志错误
- 查看PHP错误日志,搜索是否存在
ci_sessions表写入失败的报错(如数据库权限不足、字段约束冲突) - 确认运行PHP的服务器进程(如www-data)对目标数据库拥有
INSERT、UPDATE权限
- 查看PHP错误日志,搜索是否存在
重定向环节验证
- 在登录成功后、执行重定向前,手动输出
$this->session->userdata('your_user_key'),确认Session已写入内存,再检查数据库是否有对应记录 - 重定向时使用默认的
location方式:redirect('home', 'location');,避免使用refresh参数,部分环境下refresh会触发Cookie丢失
- 在登录成功后、执行重定向前,手动输出
快速验证方案
- 先还原所有修改的配置与代码,重启PHP服务
- 检查
ci_sessions表的ip_address字段长度,不符合则修改 - 开启CI调试日志(
$config['log_threshold'] = 2;),查看application/logs中Session相关的错误信息
内容的提问来源于stack exchange,提问作者rencie
相关产品推荐
相关产品推荐

