使用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
使用laravels同一请求响应不幂等

这个是控制器获取用户信息
使用laravels同一请求响应不幂等

3. 您期望得到的结果?

和fpm一样正常显示

4. 您实际得到的结果?

用户A,B,C同时登录 A可能得道BC的响应结果
甚至是,路由A响应路由B的结果

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 35
jiangjun

说明第二次请求,类里面还保存着第一次的数据。了解一下cli模式下开发避免的数据。因为常驻内存,有些数据是不会释放的。

1年前 评论
随波逐流

应该是 new UserService() 单例的问题,可以在每次请求中, 重新注册 或者 清除

具体查看文档 hhxsv5/laravel-s cleaners

1年前 评论
陈先生 1年前

$reqest->request()->add 改为 $request->merge(['user_id'=>'user_id']); 看起来是 SymfonyRequest 并未被重新实例化导致的,具体的代码可以查看下图两处

// \Illuminate\Http\Request::capture // 图一
// \Symfony\Component\HttpFoundation\Request::createFromGlobals // 无图
// \Symfony\Component\HttpFoundation\Request::createRequestFromFactory  // 图二

file

file

1年前 评论
保安 (楼主) 1年前
陈先生 (作者) 1年前
保安 (楼主) 1年前
陈先生 (作者) 1年前
保安 (楼主) 1年前
陈先生 (作者) 1年前
保安 (楼主) 1年前
保安 (楼主) 1年前
陈先生 (作者) 1年前
保安 (楼主) 1年前
meows 1年前
meows 1年前
meows 1年前
保安 (楼主) 1年前
silie 1年前
GDDD

直接使用hyperf或者webman不好吗

1年前 评论
保安 (楼主) 1年前

request 上不要保存状态相关的数据, 要保存也得从上下文取request对象

file

1年前 评论
保安 (楼主) 1年前
晏南风 (作者) 1年前
保安 (楼主) 1年前
晏南风 (作者) 1年前
保安 (楼主) 1年前
保安 (楼主) 1年前

用laravels的话还是不要用request()了,有不少坑,我之前在控制器里用request()->user()获取用户第一次请求能获取到,第二次之后一直是null,后面换成Auth::user()才可以,这个问题issue上已经存在很久了,也没看到作者回复

1年前 评论
保安 (楼主) 1年前
silie (作者) 1年前
保安 (楼主) 1年前
狒狒达人 1年前

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