session无法正常存储数据,并且每次刷新都会生成新的session文件

1. 运行环境

WNMP

1). 当前使用的 Laravel 版本?

Laravel Framework 7.30.6

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.4
php-fpm 版本:74

3). 当前系统

Windows 7

4). 业务环境

生产环境

2. 问题描述?

当我在Index控制器index方法中调用另一个控制器的getList方法时,需要获取上次session存储的值,但每次页面刷新的时候都会跑到if判断中去【session的驱动为file】

session无法正常存储数据,并且每次刷新都会生成新的session文件

Laravel
每次刷新页面会生成新的session文件,并且获取不到上一次session存储的值,使用request()->session()->save()手动保存依旧无效
(注:每次请求成功后都会将session中nu的值+1并重新存储)
我也尝试过不在__construct()中存取session,单独增加两个方法(getSession,setSession)来存取session的值,可依旧达不到理想的效果

3. 您期望得到的结果?

session可以正常存取

4. 您实际得到的结果?

每次都会进行重新赋值

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

好像是不能在控制器构造函数里操作 session

2周前 评论
Mr_Jia (楼主) 2周前
zhaojjiang (作者) 2周前
Mr_Jia (楼主) 2周前

你是不是前后端分离的项目?

2周前 评论
Mr_Jia (楼主) 2周前

应该没错,把 put 之前的输出 dump 去掉试试,换成 log 调试

2周前 评论
Mr_Jia (楼主) 2周前
Mr_Jia (楼主) 2周前
php_yt (作者) 2周前
陈先生

我没记错的话, 控制器的构造方法中不能使用 session 吧, 因为按照 laravel 的生命周期,匹配到路由的时候控制器就已经被实例化了,这个时候 web 中间件组还没得到执行, 所以你是得不到session 的. 给你一个解决方案吧. 理论可行,手头没测试项目. 请自行测试.

// __construct
$this->middleware(function ($request, $next) {
            $request->session()->put('example', []);
            return $next($request);
        });
2周前 评论
Mr_Jia (楼主) 2周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!