Laravel 多域会话

Posted

技术标签:

【中文标题】Laravel 多域会话【英文标题】:Laravel Multi Domain Session 【发布时间】:2015-03-20 04:28:58 【问题描述】:

我不是一个出色的开发人员,所以我想我遇到的问题对我来说太大了。

我有一个项目,其中我有当前语言的不同子域。当我登录用户时,它仅记录当前子域。因此,当我登录“en.Aproject.com”,然后转到“de.Aproject.com”时,用户将不会登录。他们不共享会话。我已经尝试在 app/sessions.php 中修改 'domain' => null。但是当我在这里更改值时,登录根本不起作用。然后每次在数据库中创建一个新的 Session-row 时,Laravel 似乎都无法识别它们。

当前域是否以某种方式保存在会话标识符中?是否可以将一个会话用于不同的域?我找到了一些关于 OAuth 和单点登录的东西,但我自己无法处理。

我正在考虑(在登录并且凭据正确时)通过 Ajax 调用脚本,该脚本应该为所有需要的域登录用户。但是我必须为注销做同样的事情。而且我可能会有很多域。该项目将有一个基本页面和几个子项目(都使用不同的语言)。像这样

mainproject.com

zh.mainproject.com

de.mainproject.com

...

Aproject.com

zh.Aproject.com

de.Aproject.com

...

Bproject.com

zh.Bproject.com

de.Bproject.com

...

因此,让用户登录来点赞 20 个不同的页面并创建 20 个会话会感觉不对...最好只为所有这些页面使用一个会话。

好的,我希望您了解问题,并且有人已经遇到过同样的问题并找到了解决方案。谢谢!!!!!!!!打招呼。格蒂


背景信息.. 我正在使用 Laravel 4.2

现在我只是尝试了一些东西,也许它可以帮助某人。实际上第 2 点对我来说很奇怪(见下文)

我展示了这三件事:

Session::getId()

Auth::getName()

var_dump(Session::all())

我在“de.Aproject.com”上展示它们。我在这里登录。

我将它们显示在“en.Aproject.com”上...我仍然注销的地方(我想修复它:D)

    Session::getId() 的值两边不同。这就是我猜的问题,他们应该共享相同的。 Auth::getName() 的值在两边相同(login_82e5d2c56bdd0811318f0cf078b78bfc)。我不明白。为什么我未登录时第二页有这个值? Session::all() 的值在第一个站点上是 ["login_82e5d2c56bdd0811318f0cf078b78bfc"] => string(17) "test@test.de",在第二个站点上是空的。没错。

【问题讨论】:

【参考方案1】:

由于默认的 Laravel 身份验证系统使用 cookie 来管理会话,因此您实际上需要在您要使用的每个子域上登录用户。为避免这种情况,您可以使用其他会话驱动程序,例如数据库。

【讨论】:

以上是关于Laravel 多域会话的主要内容,如果未能解决你的问题,请参考以下文章

laravel 多域 csrf tokenmismatch

laravel 配置多域名最简单的方法

Laravel 会话与原生 PHP 会话性能差异

Laravel 如何在会话 Laravel 中存储额外的数据/值

Laravel 会话立即过期(Laravel 5.5)

在 3rd 方插件中访问 laravel 会话