我正在考虑将 laravel 中的 session_domain 换成基本域的一部分,如下所示:'.example.com'。
这样我们就可以跨基域的所有子域持久化会话,因为默认情况下 cookie 仅持久化在当前域上
我已经在本地测试了这个工作正常,但它似乎会导致活动会话出现问题,因为旧的 cookie 仍然保留在用户浏览器中的旧域中。这在尝试进行身份验证时似乎会导致问题,因为现在有多个会话 cookie(一个使用旧的,一个使用新的 cookie 域路径)。我必须手动清除 cookie 才能正常工作,我显然不希望我的用户这样做。
我并不热衷于让中间件过期/取消设置这些浏览器 cookie 的想法,因为在每个请求上运行它似乎效率低下。
清除 Laravel 中现有浏览器会话的最佳方法是什么,以便在我交换 session_domain 时不会导致现有用户会话出现问题?
答案 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 名称