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
相关产品推荐
相关产品推荐

