为同一个Laravel应用程序创建多个会话cookie

时间:2017-03-27 12:22:20

标签: php facebook laravel session cookies

我在这样的域上放置了一个Laravel 5.2应用程序:https://www.example.com

laravel_session cookie配置为使用点表示法(包括子域名):

配置/ session.php文件:

'cookie' => 'laravel_session',
'path' => '/',
'domain' => env('SESSION_COOKIE_DOMAIN', null)
服务器上的

.env 文件:

SESSION_COOKIE_DOMAIN=.example.com

我使用数据库作为会话驱动程序。

现在,有些会话cookie被复制,在cookie列表中我可以看到这样的条目:

  • laravel_session,域名:.example.com
  • laravel_session,域名:.www.example.com

当用户使用Facebook进行身份验证时,Facebook会话cookie也会发生同样的事情:

  • fbm_123456,域名:.example.com
  • fbm_123456,域名:.www.example.com

在这两种情况下,重复的Cookie的到期日期都不同

此Cookie重复会导致身份验证问题 - 某些用户尝试登录,但会重定向回主页,并且auth状态保持不变。

我似乎无法重现这个问题,或者更确切地说是什么造成了这个问题。不过,我认为它可能与Laravel会话过期相关联,或者通过remember-me令牌登录用户。

有没有人知道为什么要复制cookie?

更新

实际上,我现在意识到我们的另一个Laravel项目和这个项目之间的唯一区别是,我们在这里明确地设置了laravel_session域(到.example.com)。可能是领导。

2 个答案:

答案 0 :(得分:0)

对于有类似问题的人:在我们意识到我们可以自己,每个(子)域指定会话cookie名称后,我们实际上很容易解决了这个问题。

所以,我们调整了 config / session.php cookie键:

'cookie' => env('SESSION_COOKIE_NAME', 'laravel_session')

然后我们在相应的 .env 文件中设置SESSION_COOKIE_NAME变量,如下所示:

# subdomainA.example.com
SESSION_COOKIE_NAME=subdomainA_session

# subdomainB.example.com
SESSION_COOKIE_NAME=subdomainB_session

希望这有帮助。

答案 1 :(得分:0)

登录后我们重新生成了会话,问题得以解决。

session()->regenerate();