Laravel访问session用户ID报Cannot access offset of type string on string问题问询
报错触发原因
- 存储session的代码中,你用单引号包裹了
$user_data变量,PHP的单引号不会解析内部变量,导致你存入session的不是查询得到的用户模型实例,而是字面量字符串$user_data。 - 后续读取时你尝试用数组下标
['id']访问字符串类型的值,不符合PHP语法规则,直接触发类型错误。
修复方案
- 修正session存储逻辑,去掉变量外的单引号:
// 原错误代码 $req->session()->put("user", '$user_data'); // 修正后代码 $req->session()->put("user", $user_data);
- 读取session时适配取值语法:如果存入的是Eloquent模型对象,更推荐用对象属性语法获取ID,避免数组下标写法的兼容性问题:
// 原写法 $user_id = session()->get("user")['id']; // 优化后写法 $user_id = session()->get("user")->id;
额外优化建议
你当前代码中直接比对明文密码的做法存在严重安全风险,建议使用Laravel自带的哈希工具处理密码:
- 密码入库时调用
Hash::make($password)生成加密后的值存储 - 登录校验时用
Hash::check($req->input('password'), $user_data->password)验证密码正确性
内容的提问来源于stack exchange,提问作者SwottingDeveloper
相关产品推荐
相关产品推荐

