解决ThinkPHP 6 session写入为空,前端获取不到session值!

发布时间:2周前   游览量:1485    标签: TP6 session    thinkphp6    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删除之后,就成功了!

用户评论
猜你喜欢