CodeIgniter认证时Session数据显示Null的问题求助
解决CodeIgniter中Session变量跨控制器传递为空的问题
嘿,我碰到过好几个CodeIgniter开发者遇到这种Session跨控制器取不到值的情况,咱们一步步拆解问题,找出原因:
先排查最基础的Session配置问题
首先得确认你的Session库是不是正常工作的:
- 打开
application/config/autoload.php,看看是不是已经把session库加入自动加载了:
如果没加,那每次都要在控制器里手动调用$autoload['libraries'] = array('session');$this->load->library('session'),不然根本用不了Session功能。 - 再检查
application/config/config.php里的Session存储配置:- 如果用的是file驱动,
$config['sess_save_path']对应的目录必须存在,而且服务器要有读写权限(比如设置成./application/sessions,然后给这个目录700权限)。 - 如果用database驱动,要确保你已经创建了对应的session表,配置里的数据库连接也没问题。
- 如果用的是file驱动,
检查Session变量是否真的被正确设置
你在登录成功的地方,是不是这样存Session的?
// 登录逻辑里设置Session的代码示例 $this->session->set_userdata('userdata', array( 'is_logged_in' => true, 'username' => 'test_user' ));
设置完之后立刻打印一下所有Session内容,确认变量确实存进去了:
print_r($this->session->userdata());
如果这里就看不到userdata这个键,那问题出在登录时的设置环节,不是跨控制器的问题。
修复你的Login_lib里的容错逻辑
你现在的logged_in()方法直接访问$CI->session->userdata('userdata')['is_logged_in'],如果userdata这个Session键不存在,或者它不是数组,直接访问索引会报错,而且会返回Null。改成下面这样增加容错:
<?php // library/login_lib.php class Login_lib { public function logged_in() { $CI = & get_instance(); // 先取出整个userdata会话,判断是否是数组 $user_session = $CI->session->userdata('userdata'); if (!is_array($user_session)) { return null; } // 再检查is_logged_in键是否存在 return isset($user_session['is_logged_in']) ? $user_session['is_logged_in'] : null; } } ?>
确保Helper里的函数正确依赖Login_lib
你的common_helper.php里的authentication_user函数,要确保已经加载了Login_lib,不然调用的时候会找不到类:
<?php // common_helper.php if( !function_exists('authentication_user') ) { function authentication_user() { $CI = &get_instance(); // 先检查Login_lib是否已加载,没加载就手动加载 if (!$CI->load->is_loaded('login_lib')) { $CI->load->library('login_lib'); } return $CI->login_lib->logged_in(); } } ?>
最后在目标控制器里验证
在你要获取Session的控制器里,先打印全部Session内容,确认变量存在:
public function some_method() { // 如果没自动加载session,先手动加载 $this->load->library('session'); // 打印所有Session内容,看看有没有userdata print_r($this->session->userdata()); // 再调用你的方法 $this->load->library('login_lib'); var_dump($this->login_lib->logged_in()); }
按照这个流程排查,基本上就能找到问题所在了——大概率是Session没加载、配置不对,或者设置Session的时候出了疏漏。
内容的提问来源于stack exchange,提问作者Salman Bukhari
相关产品推荐
相关产品推荐

