
Laravel 9 升级后,点击邮件中的邮箱验证链接会触发用户在其他窗口被强制登出,根本原因是 config/session.php 中 same_site 配置不当;将其设为 'lax' 即可修复会话丢失问题。
laravel 9 升级后,点击邮件中的邮箱验证链接会触发用户在其他窗口被强制登出,根本原因是 config/session.php 中 same_site 配置不当;将其设为 'lax' 即可修复会话丢失问题。
在 Laravel 9 中,出于安全增强,默认启用了更严格的跨域 Cookie 策略。当用户已登录并在浏览器中打开多个标签页(例如:一个页面是仪表盘,另一个是收件箱),点击验证邮件中的链接(通常指向类似 /email/verify/{id}/{hash} 的路由)时,若服务器返回的 Session Cookie 的 SameSite 属性未正确配置,浏览器可能拒绝发送该 Cookie —— 导致 Laravel 无法识别当前会话,进而视用户为“未认证”,触发重定向至登录页或验证提示页,甚至主动调用 Auth::logout()(尤其在某些中间件逻辑或自定义验证守卫行为下),造成“原窗口被登出”的表象。
该问题并非邮箱验证逻辑本身缺陷,而是底层会话 Cookie 的传输策略与现代浏览器(Chrome 80+、Firefox 79+、Safari 14+)默认行为不兼容所致。Laravel 9 默认将 session.same_site 设为 null 或 'lax'(取决于安装方式),但若项目在升级过程中手动修改过 config/session.php,尤其是将 'same_site' 错误设为 'strict' 或空字符串(''),就会引发此问题。
✅ 正确修复方式如下:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 打开
config/session.php; - 定位到
'same_site'配置项; - 明确设置其值为字符串
'lax':
'same_site' => 'lax',
⚠️ 注意事项:
- 不要设为
'strict':它会阻止所有跨站请求携带 Cookie,导致验证链接完全无法维持会话; - 不要留空(
'')或设为null:Laravel 9+ 期望显式声明,否则可能触发底层框架回退逻辑,行为不可控; - 若应用部署在子域名环境(如
app.example.com和mail.example.com),还需确保'domain'配置支持共享 Cookie(例如设为'.example.com'),但same_site => 'lax'仍是前提; - 修改后务必清除浏览器缓存及本地 Cookie,并重启 Laravel 应用(如使用 Artisan server,需重新运行
php artisan serve)。
完成配置后,用户点击验证邮件链接时,浏览器将正常携带 Session Cookie,Laravel 能准确识别已登录状态,直接完成邮箱验证并重定向至预期页面(如 verification.notice 或自定义目标页),不再发生意外登出或循环跳转。这是 Laravel 9 兼容现代 Web 安全标准的关键配置实践。

















