在登录保存到session中一直打印session为null 一直没想明白,从middleware开启session一直到runtime下session目录也没有显示session日志,接下来从几点着重分析,
1.单应用下需要在在app目录下初始化session;
\think\middleware\SessionInit::class //去掉注释就初始化成功了
2.多应用下需要将middleware复制到对应目录下,再初始化session需要把公共目录下的session关掉;
3.语法中不能涉及到die 和exit 有就需要去掉;
4.浏览器是否禁用了cookie 禁用后也无法读取session(一般不会出现禁用);
5.在config 目录下cookie文件设置的过期时间;
'expire' => 60 * 60 * 24, //在config目录下会有cookie和session文件 设置这个字段名时间长度即可
6.排查语法错误,在runtime/session有没有生成log;
7.检验session的会话id是否正确;
或者可以halt方法和echo 打印session_id()
8.在php.ini中将session.use_trans_sid = 0 改为session.use_trans_sid = 1
综上所述如果session没有初始化那么就没有后面的步数
接下来我们来看我遇到的问题
首先登录后更新数据库表,但是我打印session为null
检查数据库确实更新了数据,那就是跟新数据但是没保存session
综上所述初步判定是没有保存session,也就是我保存session的语法写错了
//记录到session中
session(config("admin.session_admin"),$adminUsername);
这种写法表面上看没啥问题,其实也没问题,但是在我这无法这么写,需要改为如下
参考官方的文档给的语法如下
$res = Session::set("adminUSER",$adminusername);
retrun show(config("status.succes"),$res);
也就是说需要用session::set()方法,在引入session的门面模式
最后在用助手函数halt()打印session
public function md5()
{
halt(session::get("adminUSER"));
}
最后打印如下
注意session的时长一定要设置久一些
根据网上搜集的资料就是如上,我这边只知道不能用session()方法,只能用官方提供的set才可以写入。
请大家指教,谢谢!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。