You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中无法读取Cookie问题求助

解决Laravel中Cookie存储后无法读取(返回NULL)的问题

问题描述

在Laravel项目中,存储用户数据到Cookie后,在其他控制器读取时返回NULL,已完成以下操作但问题仍存在:

  • 在中间件中豁免该Cookie加密
  • 路由设置在web路由中

创建Cookie的代码:

$cookieData = [
    'user_id' => $user->id,
    'email' => $user->email,
    'login_status' => true, 
];

// 创建有效期1天的Cookie
$cookie = cookie('user_info', json_encode($cookieData), 1440);
return response()->json(['message' => 'Authentication successful'])->withCookie($cookie);

读取Cookie的代码:

$abc = $request->cookie('user_info');
$value = Cookie::get('user_info');

if (Cookie::has('user_info')) {}

解决建议

1. 明确指定Cookie的路径和域名

默认情况下,Laravel创建的Cookie路径为当前请求的路由路径,跨路径访问时会无法读取。创建Cookie时显式指定路径为根路径(/),确保所有控制器都能访问:

$cookie = cookie('user_info', json_encode($cookieData), 1440, '/', null, env('APP_ENV') === 'production', false);
  • 第4个参数'/':设置Cookie路径为根目录,覆盖所有路由路径
  • 第5个参数null:使用应用默认域名,也可指定具体域名如yourdomain.com
  • 第6个参数:生产环境(HTTPS)设为true,本地开发(HTTP)设为false,确保Cookie能被浏览器存储
  • 第7个参数:设为false关闭HttpOnly(若不需要前端读取可设为true,不影响后端读取)

2. 确认Cookie豁免加密配置正确

检查App\Http\Middleware\EncryptCookies中的$except数组,确保已添加user_info:

protected $except = [
    'user_info',
];

同时确认该中间件已包含在web路由组中(默认已包含,可在app/Http/Kernel.php的$middlewareGroups['web']中查看)。

3. 前端AJAX请求需携带Credentials

如果是前后端分离场景,前端发起AJAX请求时必须设置携带Cookie,以Axios为例:

axios.get('/your-read-route', {
    withCredentials: true
});

否则浏览器不会自动将Cookie发送到后端,导致读取结果为NULL。

4. 清除浏览器缓存与Cookie

手动清除浏览器中当前域名的所有Cookie,避免旧Cookie残留干扰,重新发起登录请求后再测试读取逻辑。

5. 调试验证Cookie的传递过程

  • 创建时验证响应头:在返回响应前打印Cookie详情,确认Set-Cookie头是否正确生成:
    $response = response()->json(['message' => 'Authentication successful'])->withCookie($cookie);
    dd($response->headers->getCookies());
    return $response;
    
  • 读取时验证请求Cookie:在读取的控制器中打印所有请求携带的Cookie,确认user_info是否存在:
    dd($request->cookies->all());
    

内容的提问来源于stack exchange,提问作者user25439100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 23:47:40