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

PHP CodeIgniter登录后如何正确输出用户名等会话用户数据

故障根因
  • 数据库查询结果取值写法错误:你调用result_array()方法拿到的是纯数组结构的结果集,不是对象,用$result->username这种对象属性取值方式,根本获取不到用户名字段值,自然没法写入session。
  • session操作写法混用:给user_id赋值用的是CodeIgniter框架自带的session类方法,给username赋值却直接操作原生$_SESSION全局变量,CI重定向时会触发框架session的写入逻辑,两种混用很容易导致原生写入的值被覆盖、丢失。
修复方案

1. 修正控制器登录逻辑的session赋值部分

把原来登录成功块里的代码替换为以下内容:

if ($query->num_rows()){
    // 直接取单行结果数组,无需额外取[0]下标
    $user_info = $query->row_array();
    // 统一用框架session方法批量写入用户信息,不要混写原生$_SESSION
    $this->session->set_userdata([
        'user_id'  => $user_info['uid'],
        'username' => $user_info['username']
    ]);
    redirect('admin/dashboard');
}

2. 修正视图层的session读取写法

不要直接读取原生$_SESSION变量,统一用框架提供的session方法读取,避免读取不到值,视图代码修改为:

<h1>Hi <?php echo $this->session->userdata('user_id');?></h1>
<h1>Hi <?php echo $this->session->userdata('username');?></h1>
其他优化建议
  • 提前在application/config/autoload.php配置中自动加载session库,避免漏加载导致session异常:
    $autoload['libraries'] = array('session');
    
  • 现有SQL语句直接拼接前端传入的$email、$password参数,存在严重SQL注入风险,建议改用CI查询构造器或参数绑定写法。
  • 密码明文存储在数据库中存在安全隐患,建议使用password_hash()对密码做哈希后存储,登录时用password_verify()做校验。

内容的提问来源于stack exchange,提问作者javax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:09:11