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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:27:46