Laravel - 清除浏览器会话 cookie

时间:2021-04-12 09:31:04

标签: laravel session cookies session-cookies

我正在考虑将 laravel 中的 session_domain 换成基本域的一部分,如下所示:'.example.com'

这样我们就可以跨基域的所有子域持久化会话,因为默认情况下 cookie 仅持久化在当前域上

我已经在本地测试了这个工作正常,但它似乎会导致活动会话出现问题,因为旧的 cookie 仍然保留在用户浏览器中的旧域中。这在尝试进行身份验证时似乎会导致问题,因为现在有多个会话 cookie(一个使用旧的,一个使用新的 cookie 域路径)。我必须手动清除 cookie 才能正常工作,我显然不希望我的用户这样做。

我并不热衷于让中间件过期/取消设置这些浏览器 cookie 的想法,因为在每个请求上运行它似乎效率低下。

清除 Laravel 中现有浏览器会话的最佳方法是什么,以便在我交换 session_domain 时不会导致现有用户会话出现问题?

1 个答案:

答案 0 :(得分:0)

您需要为每个子域更改 APP_NAME

因为它替换了同一个浏览器上不同标签的同名会话、cookie。简而言之,如果您登录到一个域,它将替换之前的域 cookie。所以你需要为每个子域设置不同的。

如果您在每个域上有多个 .env,那么如果您为不同的域使用同一个 env 文件,则需要对其进行动态更改。这样您的 cookie 就不会被替换。

如果你看里面的 config/session.php

'cookie' => env(
    'SESSION_COOKIE',
    Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),

如果您在 Application 部分内的浏览器 Cookies 标签中看到该名称,您的 cookie 名称就是在此处生成的。

在您的情况下,它将是 laravel_session cookie 名称