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

Codeigniter 3.0在Ubuntu下会话不完整仅显示__ci_last_regenerate求助

解决CodeIgniter 3在Ubuntu下会话仅显示__ci_last_regenerate的问题

我之前帮不少开发者解决过CodeIgniter 3在Ubuntu下的会话丢失问题,你遇到的这种只返回Array ( [__ci_last_regenerate] => 1522220387 )的情况,大多是会话存储或配置层面的问题,咱们一步步排查:

  • 检查会话存储目录的权限
    CodeIgniter默认会把会话文件存在application/cache/session目录(如果没指定其他路径的话)。Ubuntu下Web服务一般以www-data用户运行,要是这个目录的权限不对,CI根本写不进会话数据。
    先手动确认目录存在,然后执行权限修改命令:

    sudo mkdir -p application/cache/session
    sudo chown -R www-data:www-data application/cache/session
    sudo chmod 700 application/cache/session
    

    700权限是最安全的,只有所有者能读写,避免会话文件被其他用户访问。

  • 核对config.php里的会话核心配置
    打开application/config/config.php,重点检查这几个参数:

    • $config['sess_driver'] = 'files';:确保用的是文件驱动(默认值,也是最稳定的)
    • $config['sess_save_path'] = APPPATH.'cache/session/';:路径要准确,用APPPATH常量避免硬编码错误
    • $config['sess_match_ip'] = FALSE;:如果开启了IP匹配,要是你的网络环境有代理或者IP动态变化,会直接导致会话失效,开发环境建议先关掉
    • $config['sess_cookie_secure'] = FALSE;:本地开发用HTTP的话,这个必须设为FALSE,不然浏览器不会保存会话Cookie
    • $config['sess_regenerate_destroy'] = FALSE;:暂时设为FALSE,避免重新生成会话时销毁旧数据导致丢失
  • 确认会话数据的设置方式正确
    别用原生PHP的$_SESSION直接操作(虽然CI兼容,但容易出问题),一定要用CI自带的会话方法:

    // 单个键值对设置
    $this->session->set_userdata('username', 'Shadab');
    // 批量设置
    $this->session->set_userdata([
        'email' => 'your@email.com',
        'role' => 'admin'
    ]);
    

    然后用$this->session->all_userdata()或者$this->session->userdata('username')来获取,别直接打印$_SESSION(CI对会话做了封装)。

  • 排查PHP全局会话配置
    偶尔Ubuntu的PHP默认配置会影响CI会话,你可以创建一个phpinfo.php文件,内容是<?php phpinfo(); ?>,访问后查看以下项:

    • session.save_path:确认这个路径是可写的,或者被CI的配置覆盖成了我们设置的application/cache/session
    • session.cookie_domain:如果是本地开发,这个值应该是空或者localhost,别设成生产环境的域名
  • 做一个极简测试
    写个简单的测试控制器,排除业务代码的干扰:

    class SessionTest extends CI_Controller {
        public function index() {
            // 设置测试会话数据
            $this->session->set_userdata('test_data', 'Hello CI Session');
            // 打印所有会话数据
            var_dump($this->session->all_userdata());
        }
    }
    

    访问这个控制器,如果还是只显示__ci_last_regenerate,那基本可以确定是存储路径或权限的问题,回到第一步重新检查。

内容的提问来源于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 06:27:06