今天,把学习tp6 过程中,遇到的一个让我爆粗口的坑,向大家说明一下
遇到了一个很隐晦的一个坑,就是session 不能跨控制器使用,官方文档也没有给出什么注释
咱们先来看看官方的使用方法
使用session需要引入session类可以直接使用think\facade\session,
这个我就不多说了,需要注意的,坑来了!!!坑来了!!!坑来了!!!
session功能默认是没有开启的(API应用通常不需要使用session),如果你需要使用Seesion,需要在全局的中间件定义文件中加上下面的中间件定义:
'think\middleware\sessionInit'
如果是多应用模式,并且你只是用于部分应用,那么也可以在应用中间件定义文件中单独开启。
全局的中间件文件在app目录下middleware.php
里面有session的初始化,默认是注释的,取消注释即可,之后就可以使用session 了,一般开启
composer require topthink/think-multi-app
既然都准备好了,在调试时会不会使用下面这样的内容调试??尤其是登陆需要存储cookie时
echo json_encode();exit;
echo json_encode($arr);die();
下面才是我重点要说的,让我难受香菇的!
tp6在初始化了session或cookie 后,你如果在session或cookie后使用die 或exit,session或cookie 会消失!!!会消失!!!会消失!!!
解决办法
1、使用Cache替代
2、可以使用原生的$_session ,$_COOKIE替代
以上这篇thinkphp6.x 无法使用cookie和session 解决办法就是分享给大家的全部内容了,希望能给大家一个参考,这就是花费了我两天时间来调试,为什么cookie没有成功设置进去,让我万分暴躁,终于在刚才,找到了这个原因,希望大家在学习或开发tp6时,不在再踩坑,其他类似tp5,我暂不知道是否也存在这个问题,大家多多避坑
在学习TP6过程中遇到session不能跨控制器使用的难题,原因是session功能默认未开启,需在中间件定义文件中启动。另外,初始化session或cookie后使用die或exit会导致数据丢失。解决办法包括使用Cache替代或直接用$_SESSION和$_COOKIE。
269

被折叠的 条评论
为什么被折叠?



