php session不生效_解决ThinkPHP6设置session不生效的问题

如果你不是在 session 写入操作之后执行 exit 等中断操作导致不生效的话,那可能就是你的配置写错地方了

官方文档中提到了:新版本不支持操作原生 $_SESSION 数组和所有 session_开头的函数,只能通过 Session 类(或者助手函数)来操作。会话数据统一在当前请求结束的时候统一写入 所以不要在 session 写入操作之后执行 exit 等中断操作,否则会导致 Session 数据写入失败。

既然不是执行 exit 等中断操作导致不生效,那肯定是有问题的

文档中说明了如果需要使用 Seesion,需要在全局的中间件定义文件中加上下面的中间件定义:

'think\middleware\SessionInit'

在文档中搜索了一下全局中间件才发现… 卧槽,写错文件了

├─app 应用目录

│ │

│ ├─BaseController.php 默认基础控制器类

│ ├─ExceptionHandle.php 应用异常定义文件

│ ├─common.php 全局公共函数文件

│ ├─middleware.php 全局中间件定义文件

│ ├─provider.php 服务提供定义文件

│ ├─Request.php 应用请求对象

│ └─event.php 全局事件定义文件

全局搜索了一下才发现有两个 middleware.php 文件

一个是 config/middleware.php,另外一个是 app/middleware.php

设置失败的时候是因为将 \think\middleware\SessionInit::class 写入到了 config/middleware.php 文件中,而不是全局中间件定义文件中

结案了… 好沙雕的问题

默认的全局中间件中存在三个,包括了 session 的,但是是注释状态,打开注释即可

// 全局中间件定义文件

return [

// 全局请求缓存

// \think\middleware\CheckRequestCache::class,

// 多语言加载

// \think\middleware\LoadLangPack::class,

// Session初始化

\think\middleware\SessionInit::class

];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值