解决ThinkPHP 6 session写入为空,前端获取不到session值!
这段时间使用TP6写网站前端登录的时候,发现一个session问题,就是后端写入的session数值,前端获取不到。
通过百度查看了一些方法,大同小异,就是让你在全局中间件的初始化session(app\middleware.php):
这个肯定要开的,这是百度千篇一律的方法,但是开了前台还是获取不到!
目录为:app\middleware.php <?php // 全局中间件定义文件 return [ // 全局请求缓存 // \think\middleware\CheckRequestCache::class, // 多语言加载 // \think\middleware\LoadLangPack::class, // Session初始化 \think\middleware\SessionInit::class, ];
我开启之后还是无法获取数据,获取的数据为空,最后看了一下官方文档,上面一些写的很清楚了:
新版本不支持操作原生$_SESSION数组和所有session_开头的函数,只能通过Session类(或者助手函数)来操作。 会话数据统一在当前请求结束的时候统一写入 所以不要在session写入操作之后执行exit等中断操作,否则会导致Session数据写入失败。
session后面的写入操作之后不能有exit,die等中断操作。你可能以为的中断方法是下面这样?
你可能以为的session后面不能有中断方法是下面这样? if ($res) { session('username', $res['username']); die(); } else { return $this->message('400', '注册失败'); }
我当时写的代码其实是这样,也不能获取session的值,如下:
if ($res) { session('username', $res['username']); return $this->message('200', '注册成功'); } else { return $this->message('400', '注册失败'); }
最后才发现,原来在调用的方法$this->message()里面有die()终止语句。
public function message($code, $msg = '', $data = []) { $msg = [ 'code' => $code, 'msg' => $msg, 'data' => $data ]; echo json_encode($msg); die(); }
这个方法中就有die中断,所以导致session写入不成功!把后面的die删除之后,就成功了!
用户评论
猜你喜欢