
Laravel 9 升级后,点击邮件中的邮箱验证链接会导致已登录用户被强制登出,形成“登录→跳转验证页→再次登录”的死循环;根本原因在于 session.php 中 same_site 配置不当,需设为 'lax' 以兼容现代浏览器的 CSRF 和会话策略。
laravel 9 升级后,点击邮件中的邮箱验证链接会导致已登录用户被强制登出,形成“登录→跳转验证页→再次登录”的死循环;根本原因在于 `session.php` 中 `same_site` 配置不当,需设为 `'lax'` 以兼容现代浏览器的 csrf 和会话策略。
在 Laravel 9 中,内置邮箱验证机制本身逻辑未变,但其行为受底层 HTTP 安全策略(尤其是 SameSite Cookie 属性)显著影响。自 Chrome 80+ 及主流浏览器全面强化 SameSite 默认策略后,若 Laravel 的会话 Cookie 未显式声明兼容的 SameSite 值,跨域或重定向场景(如从邮件客户端点击验证链接)将导致会话 Cookie 不被发送,从而触发「用户被静默登出」——这正是你遇到的「原窗口登出」「验证页反复跳转」问题的核心。
关键修复步骤如下:
- 打开配置文件
config/session.php; - 找到
'same_site'选项(通常位于secure或http_only附近); - 将其值明确设置为
'lax'(注意是字符串,非null或'strict'):
'same_site' => 'lax',
✅ 为什么是 'lax'?
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
'lax'允许 GET 请求(如点击邮件链接)携带 Cookie,保障验证流程中会话持续; - 同时阻止危险的跨站 POST 请求,兼顾安全性与可用性;
-
'none'虽可强制发送,但要求同时设置'secure' => true(即仅 HTTPS 环境),开发环境易报错; -
'strict'则完全禁止跨站 Cookie 发送,导致验证链接点击后会话丢失。
⚠️ 额外注意事项:
- 确保
.env中SESSION_DRIVER为cookie、file或redis等支持持久化的驱动(避免使用array); - 若部署在子路径(如
/app)或反向代理后,请同步检查APP_URL和SESSION_DOMAIN配置是否匹配; - 清除浏览器缓存及旧会话 Cookie 后测试,避免残留配置干扰;
- Laravel 9.2+ 默认已将
same_site设为'lax',但升级项目常保留旧配置,务必手动校验。
完成配置后,重启应用(如使用 php artisan config:clear && php artisan cache:clear),重新发送验证邮件并点击链接——此时已登录用户将保持会话,直接完成邮箱验证,不再触发登出或重定向循环。










