Laravel应用中自定义Cookie在其他模块无法读取的问题排查
场景背景
我开发了一个简易表单,用户无需登录,仅填写姓名即可提交帮助对象及帮助方式的记录。由于用户会多次提交,我打算通过在永久Cookie中存储UUID的方式,实现不依赖登录态的用户分组记录。
实现过程与问题
我参考《Setting Cookie in Laravel Custom Middleware》的思路,编写了自定义中间件来设置UUID永久Cookie。中间件中可以正常设置并验证UUID已存在,但在表单控制器中读取该Cookie时,请求显示Cookie存在但值为NULL。
查阅资料后得知Laravel默认会加密Cookie,给uuid Cookie添加加密豁免后,就能正常读取其值了。我的应用不需要该Cookie的加密功能,保持豁免状态没问题,但我想弄明白出现这个问题的原因——我原本以为Laravel会自动处理Cookie的加密和解密流程!
相关代码
中间件配置(全局注册+加密豁免)
... ->withMiddleware(function (Middleware $middleware) { $middleware->append(SetUUIDMiddleware::class); $middleware->encryptCookies(except: ['uuid']); }) ...
自定义中间件代码
public function handle(Request $request, Closure $next): Response { if($request->hasCookie('uuid')) { return $next($request); } $uuid = (string) Str::uuid(); return $next($request) ->withCookie(cookie()->forever('uuid', $uuid)); }
现象对比
- 未添加加密豁免时,控制器中
$request的Cookie状态:
- 添加加密豁免后,控制器中
$request的Cookie状态:
内容的提问来源于stack exchange,提问作者wruckie
相关产品推荐
相关产品推荐

