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
相关产品推荐
相关产品推荐

