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

PHP5.6环境下CI3框架刷新页面后Session丢失问题咨询

CodeIgniter 3 页面刷新后Session丢失修复方案

首先定位核心配置错误:

  • 你当前config.php中$config['cookie_secure'] = TRUE;配置是问题根源。该配置生效规则为仅HTTPS协议下浏览器才会存储Session对应的Cookie,如果你运行环境是普通HTTP协议,浏览器不会留存ci_session标识,每次请求都会生成全新Session,表现就是刷新后数据全丢。直接将该值修改为FALSE即可解决绝大多数同类场景问题。

其余需要核对的排查点:

  • 移除你手动添加在index.php顶部的session_start()代码。CI3框架自带完整的Session生命周期处理逻辑,手动调用session_start()会和框架内置逻辑冲突,反而引发Session异常。
  • 确认/tmp目录权限正常:执行测试代码var_dump(is_writable(sys_get_temp_dir()));,返回结果为bool(true)才代表PHP进程有权限写入Session文件,返回false的话给目录补对应读写权限即可。
  • 检查核心文件是否存在BOM头:index.php、config.php、config/session.php等文件如果保存为带UTF-8 BOM的格式,会在Session启动前提前输出内容,导致Cookie无法正常下发,把文件存为无BOM的UTF-8格式即可。
  • HTTPS环境额外核对项:如果你的站点确实走HTTPS协议,确认服务器系统时间和客户端时间差不超过10分钟,时间偏移过大会导致Cookie下发后立即过期;多子域场景下正确配置$config['cookie_domain']为根域名(例如.example.com),单站点场景留空即可。

可直接参考的正确配置片段:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 1800;
$config['sess_save_path'] = sys_get_temp_dir();
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE; // 非HTTPS环境必须设为FALSE,HTTPS环境可设为TRUE
$config['cookie_httponly']  = TRUE; // 建议开启,避免XSS攻击窃取Session,不影响正常功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:33:24