前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TP6登录打印SESSION 为null的解决方法

TP6登录打印SESSION 为null的解决方法

原创
作者头像
以星河为聘礼
修改2021-09-13 11:17:36
1.5K0
修改2021-09-13 11:17:36
举报
文章被收录于专栏:编码遇到的坑编码遇到的坑

在登录保存到session中一直打印session为null 一直没想明白,从middleware开启session一直到runtime下session目录也没有显示session日志,接下来从几点着重分析,

1.单应用下需要在在app目录下初始化session;

代码语言:javascript
复制
\think\middleware\SessionInit::class     //去掉注释就初始化成功了

2.多应用下需要将middleware复制到对应目录下,再初始化session需要把公共目录下的session关掉;

多应用下的中间件
多应用下的中间件

3.语法中不能涉及到die 和exit 有就需要去掉;

4.浏览器是否禁用了cookie 禁用后也无法读取session(一般不会出现禁用);

5.在config 目录下cookie文件设置的过期时间;

代码语言:javascript
复制
'expire'    => 60 * 60 * 24,    //在config目录下会有cookie和session文件 设置这个字段名时间长度即可

6.排查语法错误,在runtime/session有没有生成log;

如果语法正确会在runtime目录下生成log文件
如果语法正确会在runtime目录下生成log文件

7.检验session的会话id是否正确;

在tp根目录下有个.env 文件将debug = flase 改成true 就可以看到session 的会话id
在tp根目录下有个.env 文件将debug = flase 改成true 就可以看到session 的会话id

或者可以halt方法和echo 打印session_id()

8.在php.ini中将session.use_trans_sid = 0 改为session.use_trans_sid = 1

综上所述如果session没有初始化那么就没有后面的步数

接下来我们来看我遇到的问题

首先登录后更新数据库表,但是我打印session为null

检查runtime\session 也未生成session信息
检查runtime\session 也未生成session信息

检查数据库确实更新了数据,那就是跟新数据但是没保存session

数据库时间戳更新了
数据库时间戳更新了

综上所述初步判定是没有保存session,也就是我保存session的语法写错了

代码语言:javascript
复制
//记录到session中
 session(config("admin.session_admin"),$adminUsername);

这种写法表面上看没啥问题,其实也没问题,但是在我这无法这么写,需要改为如下

参考官方的文档给的语法如下

代码语言:javascript
复制
$res = Session::set("adminUSER",$adminusername);
retrun show(config("status.succes"),$res);

也就是说需要用session::set()方法,在引入session的门面模式

最后在用助手函数halt()打印session

代码语言:javascript
复制
public function md5()
 {
 halt(session::get("adminUSER"));
 
 }

最后打印如下

就这样我session打印成功
就这样我session打印成功

注意session的时长一定要设置久一些

根据网上搜集的资料就是如上,我这边只知道不能用session()方法,只能用官方提供的set才可以写入。

请大家指教,谢谢!!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档