CodeIgniter多维数组Session问题:登录后视图无法获取用户数据
问题排查与解决方案
我帮你梳理下几个关键问题,一步步解决视图无法获取Session数据的问题:
1. 视图中Session数据的获取方式完全错误
你在视图里直接用$this->front_user是不对的!CodeIgniter中,通过$this->session->set_userdata($admin)设置的Session数据,必须通过$this->session->userdata('front_user')来读取,不能直接访问$this->front_user。
修改视图代码:
<?php // 先正确从Session中取出用户数据 $front_user = $this->session->userdata('front_user'); if(count($front_user) > 0):?> <a href="#" class="dropdown-toggle" data-toggle="dropdown" > <?php echo $front_user['firstname']?> </a> <a href="<?php echo site_url('front/account/logout')?>" > <i class="fa fa-sign-out pull-left"></i> <?php echo lang('logout')?> </a> <?php else:?> <a href="#" > <?php echo lang('login')?> </a> <a><?php echo lang('signup')?></a> <?php endif; ?>
2. 控制器Login方法存在致命逻辑错误
你的login控制器方法里,调用模型时用了return,导致后续判断代码完全不会执行:
// 这里的return会直接终止方法,后面的if判断根本跑不到 return $return = $this->login_model->auth ($email,$password,'',''); if($return){ echo 1;die; }
登录成功时控制器不会输出1,AJAX收到的会是模型返回的数组字符串(比如Array),自然不会触发页面刷新,你看到的还是未登录状态的视图。
修改控制器这段代码,去掉多余的return:
$return = $this->login_model->auth ($email,$password,'',''); if($return){ echo 1; die; }else{ echo 'Email or Password invalid'; }
3. 确认Session库已正确加载
必须确保CodeIgniter的Session库已经加载,两种方式二选一:
- 在控制器的
__construct方法里手动加载:public function __construct() { parent::__construct(); $this->load->library('session'); } - 或者在
application/config/autoload.php中配置自动加载:$autoload['libraries'] = array('session');
如果Session库没加载,$this->session->set_userdata()和$this->session->userdata()都会无效。
4. 模型Auth方法的冗余代码(不影响功能但建议清理)
你的模型auth方法最后有两个return,第二个return true;永远不会执行,直接删掉即可:
if (sizeof($result) > 0) { // ... 你的Session设置和Cookie逻辑 ... $this->session->set_userdata($admin); return $admin['front_user']; // return true; // 这个return永远不会执行,删掉 } else { return false; }
5. 确认AJAX刷新逻辑正常
你的AJAX成功回调里的window.location.reload()是正确的,但要确保控制器确实返回了1(修复控制器逻辑后就会正常返回),这样页面刷新后,视图才能读取到新设置的Session数据。
按照上面的步骤逐一修改,应该就能解决你视图无法获取登录用户信息的问题了。
内容的提问来源于stack exchange,提问作者Humaon Kabir
相关产品推荐
相关产品推荐

