使用laravels同一请求响应不幂等
1. 运行环境
1). 当前使用的 Laravel 版本?
8.5
2). 当前使用的 php/php-fpm 版本?
PHP 版本:7.3
php-fpm 版本:
3). 当前系统 Ubuntu 20.4
4). 业务环境 开发环境
5). 相关软件版本
2. 问题描述?
使用laravels 同一请求多次刷新,比如用户A,B,C三用户同时访问同一路由ROUTEA A可能得用户B,C的响应结果,甚至得到路由C的响应结果
甚至是,路由A响应路由B的结果
请求响应,都是用的laravel内置的request() ,response()
这个是中间件设置user_id
这个是控制器获取用户信息
3. 您期望得到的结果?
和fpm一样正常显示
4. 您实际得到的结果?
用户A,B,C同时登录 A可能得道BC的响应结果
甚至是,路由A响应路由B的结果
说明第二次请求,类里面还保存着第一次的数据。了解一下cli模式下开发避免的数据。因为常驻内存,有些数据是不会释放的。
应该是
new UserService()
单例的问题,可以在每次请求中,重新注册
或者清除
具体查看文档 hhxsv5/laravel-s cleaners
将
$reqest->request()->add
改为$request->merge(['user_id'=>'user_id']);
看起来是 SymfonyRequest 并未被重新实例化导致的,具体的代码可以查看下图两处直接使用hyperf或者webman不好吗
request 上不要保存状态相关的数据, 要保存也得从上下文取request对象
用laravels的话还是不要用
request()
了,有不少坑,我之前在控制器里用request()->user()
获取用户第一次请求能获取到,第二次之后一直是null
,后面换成Auth::user()
才可以,这个问题issue上已经存在很久了,也没看到作者回复