You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类代码,均未解决问题。

针对性排查与修复步骤

  1. 还原错误修改,恢复基础配置

    • 把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完全失效,这是核心错误操作。
  2. 验证数据库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`)
      );
      
  3. 排查权限与日志错误

    • 查看PHP错误日志,搜索是否存在ci_sessions表写入失败的报错(如数据库权限不足、字段约束冲突)
    • 确认运行PHP的服务器进程(如www-data)对目标数据库拥有INSERT、UPDATE权限
  4. 重定向环节验证

    • 在登录成功后、执行重定向前,手动输出$this->session->userdata('your_user_key'),确认Session已写入内存,再检查数据库是否有对应记录
    • 重定向时使用默认的location方式:redirect('home', 'location');,避免使用refresh参数,部分环境下refresh会触发Cookie丢失

快速验证方案

  1. 先还原所有修改的配置与代码,重启PHP服务
  2. 检查ci_sessions表的ip_address字段长度,不符合则修改
  3. 开启CI调试日志($config['log_threshold'] = 2;),查看application/logs中Session相关的错误信息

内容的提问来源于stack exchange,提问作者rencie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:32:51