必须正确加载并使用 Session 类以维持登录状态等,方法包括:构造函数加载、自动加载配置、CI4服务容器注入、辅助函数session()调用及初始化验证。

如果您在 CodeIgniter 应用中需要维持用户登录状态、临时存储表单数据或跨页面传递信息,则必须正确加载并使用 Session 类。以下是实现该目标的多种方法:
一、通过控制器构造函数加载 Session 类
此方式确保 Session 在控制器所有方法执行前已就绪,适用于 CI3 及部分 CI4 低版本,依赖手动加载机制。
1、在控制器类的构造函数中,先调用 parent::__construct();
2、紧接着调用 $this->load->library('session');
3、加载完成后,即可在任意方法中使用 $this->session->set_userdata() 或 $this->session->userdata() 操作会话数据。
二、配置自动加载 Session 类
避免在每个控制器中重复加载,将 Session 库设为全局自动加载,适用于全站需频繁使用 session 的场景。
1、打开 application/config/autoload.php 文件;
2、定位到 $autoload['libraries'] 数组;
3、将 'session' 添加进该数组,例如:$autoload['libraries'] = array('session');;
4、保存后,所有控制器无需额外加载即可直接使用 $this->session 对象。
三、CI4 中使用服务容器注入 Session 实例
CI4 引入依赖注入机制,推荐在支持版本(4.3+)中通过构造函数类型提示获取 Session 实例,提升可测试性与解耦度。
1、确认项目已启用服务容器且 Session 服务已注册;
2、在控制器中声明构造函数,接收 \CodeIgniter\Session\Session 类型参数;
审查 Remix v2 代码中的 v1 形态 meta 导出(v2 中为破坏性变更),cookie 安全漏洞(httpOnly、secure、密钥轮换),认证门位于错误层级,以及其他
3、将传入实例赋值给控制器属性,如:$this->session = $session;;
4、后续可在任意方法中调用 $this->session->set('key', 'value') 等方法。
四、运行时按需调用辅助函数 session()
CI4 提供无状态辅助函数 session(),不依赖控制器属性绑定,适合在模型、库或非标准上下文中快速获取会话实例。
1、在任意 PHP 文件中直接调用 $session = session();;
2、检查会话是否存在指定键:if ($session->has('user_id')) { ... };
3、写入数据:$session->set('cart_items', $items);;
4、读取数据:$cart = $session->get('cart_items');。
五、验证 Session 初始化是否成功
Session 静默失败是常见问题根源,需主动验证其可用性,防止后续操作无效却无报错。
1、在控制器方法中插入调试语句:var_dump($this->session instanceof \CodeIgniter\Session\Session);;
2、尝试写入并立即读取一个测试键:$this->session->set('test', 'ok'); echo $this->session->get('test');;
3、若输出为空或报错 Call to a member function set() on null,说明 Session 未正确初始化;
4、检查 encryption_key 是否已在 app/Config/App.php(CI4)或 application/config/config.php(CI3)中设置且非空。

















