首页 > 解决方案 > Laravel 会话不存储在多个域中

问题描述

我正在使用中间件根据域选择内容,但仅在其中一个中存储会话。想法不是在他们之间共享会话。每个域都必须有它的会话。

问题的示例是 CSRF 令牌在每次重新加载时都会刷新。

我已经尝试为每个域(cookie 名称、路径、域)设置配置并尝试过 cookie、文件和数据库。这些都不起作用。

部分中间件代码:

config([
    'session.domain' => $domain,
    'session.cookie' => $slugDomain . '_session',
    'session.path' => '/' . $slugDomain
]);

标签: phplaravelsessiondns

解决方案


有多种方法可以做到这一点,这里我分享一个选项:您可以在域 1 的 url 中传递 id,然后将此 id 存储到域 2 的 cookie 中:

您可以为特定会话创建 cookie:

Route::get('setcookie', function(){
  Session::setId($_GET['id']);
  Session::start();
  return 'Cookie created';
});`

然后你应该能够让你的用户通过$user = Auth::User;

这就是我在我的案例中找到解决方案的方式。

另一种解决方案是将域设置app/config/session.php为此:

'domain' => '.domain.com'

来源


推荐阅读