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 多域会话的主要内容,如果未能解决你的问题,请参考以下文章