thinkphp6中使用session设置无效问题的解决及注意事项

news/2025/2/15 15:30:41/

就如thinkphp官方在文档开头所描述的一样,ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化;其实从5.x版本开始thinkphp本身就是为api应用而生。特别是在6.0版本开始框架默认压根不开启和提供模板引擎,需要下载安装模板引擎类库后方可开启。

新版本不支持操作原生$_SESSION数组和所有session_开头的函数,只能通过Session类(或者助手函数)来操作。因此,Session功能默认是没有开启的(API应用通常不需要使用Session)。甚至我们可以这样理解:在6.0版本中框架本身不提供session机制,而是通过think\facade\Session类来模拟实现session。

根据官方文档,默认session是不开启的,需要在全局的中间件中中开启;让人如果是多应用项目,仅仅想让session应用到某个应用,可以在对应的应用的中间件中开启。其中全局中间件配置文件位于app/middleware.php

实际上仅仅在中间件中进行session初始化是不行的,如写入测试代码:

session('key',1);
var_dump(session('key'));

这个时候页面会int(1),但刷新页面后重新使用session(‘key’)获取数据会发现NULL,也就是获取不到数据值。原因在于在上述处理后session的缓存数据并没有保存起来(类似你填写一个表单,没点提交,自然刷新后就没有了)。需要在执行设置session后,执行如下代码进行保存:

实际上仅仅在中间件中进行session初始化是不行的,如写入测试代码:

session('key',1);
\think\facade\Session::save();//这个不写也一样可以用,主要是要在中间件里开启

这样操作后,我们会发现在框架的runtime目录中,会出现一个对应的session缓存文件。

里面就包含了当前会话保存的两个session值,一个是上面演示的key,一个是另外写入的vcode。

现在在系统任何位置,执行session(‘key’)都能得到预期的数据。

相对于5.x版本,6.x版本的代码更加精简,剥离了很多功能模块,如果要使用这些功能模块,需要加载额外的类库或者自己接管相应的流程进行处理。所以,笔者不建议把已经稳定运行的项目升级为了thinkphp6.0版本,官方没有提供自动化升级方案,因为差别的东西还是比较多,仅仅提供了升级指导,很多流程需要手动去进行升级。网络服务部codeit.org.cn今年开始才在新项目使用6.0版本,后续如果有时间笔者会整理该项目升级到6.0版本过程中遇到的一些典型问题及其解决方法。


http://www.ppmy.cn/news/78344.html

相关文章

一百一十七、Hadoop——GZIP压缩并解压HDFS中的文件

一、解压HDFS中的gzip压缩文件 首先,先把HDFS中的gzip压缩文件下载到本地 [roothurys22 ~]# hdfs dfs -get /rtp/statistics/statistics2023-05-17.csv.gz /opt/hdfs_rtp/ 然后,在/opt/hdfs_rtp/目录下查看文件 [roothurys22 ~]# cd /opt/hdfs_r…

FreeRTOS中断配置和临界值

Cortx-M 中断 优先级分组 Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。高的抢占式优先级可以打断低的抢占式优先级&am…

Spring Security实现登录

前言 Spring Security是Spring框架下的一个用于身份验证和授权的框架,它可以帮忙管理web应用中的用户认证、授权以及安全性问题。本文将介绍如何使用Spring Security实现用户登录功能,本文主要包括以下内容: 环境准备Spring Security核心概…

软件测试流程

1、软件测试流程 通常,软件测试流程包括以下几个步骤: 需求分析:确定软件的功能和性能需求,明确测试范围,并编写相应的测试计划。 测试计划:根据需求分析,制定测试计划,包括测试范…

视频转换芯片MS7200概述 HDMI转数字RGB/YUV/HDMI RXReceive/替代IT66021FN

1. 基本介绍 MS7200 是一款 HDMI 接收芯片,兼容 HDMI1.4b 及 HDMI 1.4b 以下标准的视频 3D 传输格 式,最高分辨率可支持到 4K30Hz,最高采样率达到 300MHz。MS7200 支持 YUV 和 RGB 之 间的色彩空间转换,数字接口支持 YUV 及 RGB 格…

Android NFC研究工具包入门指南

目录 一、NFC简介 二、Android NFC研究工具包 三、NFC的开发环境配置 四、NFC的使用方法 五、Android Beam 六、总结 一、NFC简介 NFC(Near Field Communication)近场通信,是一种短距离的高频无线通信技术,允许电子设备之间…

物联网手势控制小车所遇问题与解决方案

LCD1602无法显示问题 问题描述:按照开源社区教程完成LCD1602驱动显示程序的编写,成功点亮屏幕,开启背光,但无法观察到显示数据。 分析过程与解决方案: 1.是否IIC地址不对 使用以下代码扫描IIC总线上的设备&#xf…

【lager】日志系统2:测试程序调试

design 官方设计文档 design cmakelist增加plog构建 cmake_minimum_required(VERSION 3.1.3 FATAL_ERROR) project(Lager)set(CMAKE_CXX_STANDARD 11) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)find_package(