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

CodeIgniter在Ubuntu下无法显示全部Session值,Windows下正常的解决方案

解决方案:Ubuntu环境下CodeIgniter Session丢失adminid的问题

我之前也碰到过类似的跨环境Session异常,结合CodeIgniter的Session机制和Ubuntu的系统特性,给你几个排查和解决的方向:

1. 检查Session文件存储的权限问题

CodeIgniter默认用文件存储Session,Ubuntu下的目录权限经常是核心坑点:

  • 打开application/config/config.php,确认$config['sess_driver']设置为'files'(如果用默认文件驱动)
  • 查看$config['sess_save_path']:
    • 如果留空,CI会调用系统默认Session目录,Ubuntu下通常是/var/lib/php/sessions
    • 给这个目录赋予web服务器用户(www-data)读写权限:
      sudo chown -R www-data:www-data /var/lib/php/sessions
      sudo chmod -R 700 /var/lib/php/sessions
      
    • 也可以手动指定项目内的目录(比如application/sessions),再设置权限:
      chown www-data:www-data application/sessions
      chmod 700 application/sessions
      

2. 验证Session写入逻辑是否生效

先确认你确实成功写入了adminid:

  • 在执行set_userdata的代码后,立即打印Session数据,看写入环节是否正常:
    $this->session->set_userdata('adminid', 123);
    print_r($this->session->userdata()); // 这里如果能看到adminid,说明写入没问题,问题出在后续读取的环境配置
    
  • 如果写入时就看不到,开启CI的日志功能($config['log_threshold'] = 2;),查看application/logs里的日志,有没有Session相关的报错信息。

3. 调整Cookie相关配置

Ubuntu下浏览器的Cookie策略通常更严格,检查config.php里的Cookie设置:

  • $config['cookie_domain']:本地测试时设为''或'localhost',不要填错误的域名
  • $config['cookie_path']:设置为'/',确保整个站点都能获取Cookie
  • $config['cookie_secure']:如果没开启HTTPS,必须设为FALSE,否则Cookie不会被浏览器发送
  • $config['cookie_httponly']:可以先临时设为FALSE,排除HttpOnly属性的影响

4. 检查PHP.ini的Session全局配置

Ubuntu下的php.ini默认配置和Windows差异较大:

  • 用php -i | grep php.ini找到php.ini的路径
  • 确认session.save_path指向的目录存在且权限正确
  • 确认session.auto_start设置为Off,避免和CI的Session机制冲突
  • 确认session.cookie_domain为空或匹配你的测试域名

5. 尝试切换到数据库存储驱动

如果文件驱动的权限问题一直无法解决,可以试试数据库驱动:

  • 在config.php中修改配置:
    $config['sess_driver'] = 'database';
    $config['sess_save_path'] = 'ci_sessions'; // 对应你要创建的数据库表名
    
  • 创建对应的Session表(CI3版本示例):
    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`)
    );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:57