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

Laravel+Vue项目中Session返回null问题求助

解决Laravel+Vue部署后API请求Session丢失问题

问题核心

本地开发时Session能正常维持,但部署后API请求无法读取Session,本质是API请求默认不携带Session凭证,且生产环境的跨域、Session配置与本地存在差异。

具体解决方案

1. 修复跨域(CORS)配置

  • Laravel端:修改config/cors.php,开启凭证支持:
    'supports_credentials' => true,
    
  • Vue端:若使用axios发起请求,全局开启携带凭证:
    import axios from 'axios';
    axios.defaults.withCredentials = true;
    

2. 校验Session驱动与域名配置

  • 调整config/session.php:
    • 生产环境建议使用redis或database驱动(file驱动易因权限问题失效):
      'driver' => env('SESSION_DRIVER', 'redis'),
      
    • 配置匹配前端域名的Session域(比如前端域名为your-domain.com):
      'domain' => '.your-domain.com', // 带前缀点,适配子域名场景
      
  • 确认.env中APP_KEY为生产环境专用值(禁止复用本地环境的APP_KEY)。

3. 改用Sanctum认证(API场景最佳实践)

你的代码已生成Sanctum Token,却依赖Session获取用户信息,不符合API无状态设计原则,调整如下:

  • 修改getNotifications方法,通过认证中间件直接获取用户:
    public function getNotifications()
    {
        $user = auth()->user();
        $notifications = RequestNotifications::where('notifiable_id', $user->u_id)
            ->orderBy('created_at', 'DESC')
            ->limit(10)
            ->get();
        return response()->json($notifications);
    }
    
  • 给路由添加auth:sanctum中间件保护:
    Route::get('/api/notifications', [YourController::class, 'getNotifications'])->middleware('auth:sanctum');
    
  • Vue端请求时,在请求头携带登录时获取的Token:
    const token = localStorage.getItem('auth_token');
    axios.get('/api/notifications', {
        headers: {
            'Authorization': `Bearer ${token}`
        }
    });
    

4. 检查Session存储权限

若使用file驱动,确保storage/framework/sessions目录拥有服务器用户的读写权限:

chmod -R 755 storage/framework/sessions
chown -R www-data:www-data storage/framework/sessions # 根据服务器运行用户调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:27:23