解决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的,但是是注释状态,打开注释即可

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
     \think\middleware\SessionInit::class
];

1 条评论

发表评论

*