无法使用 Laravel 4 与子域共享会话

Posted

技术标签:

【中文标题】无法使用 Laravel 4 与子域共享会话【英文标题】:Cannot share session with subdomains with Laravel 4 【发布时间】:2013-09-30 09:11:48 【问题描述】:

我正在尝试在具有许多子域的主机上使用 Laravel。只有一个子域会运行 Laravel 的应用程序,但我想通过 php 本地会话分享一些东西(比如当前用户)。

我编辑了 Laravel 的会话配置以使用子域,更改域值:

'cookie' => 'mydomain_session',
'domain' => '.mydomain.com',

在另一个未运行 Laravel 的子域中,我正在尝试以这种方式访问​​会话:

session_name("mydomain_session");
session_set_cookie_params(0,'/','.mydomain.com',false,true);
session_start();

但它不起作用,如果我尝试回显 $_SESSION 变量为空。

最奇怪的是,如果我尝试回显 session_id(),它在两个子域中都是一样的。

此外,如果我在第三个子域中设置相同的脚本,它会毫无问题地与另一个非 laravel 子域共享会话。

那么我做错了什么?我遗漏了什么,或者 Laravel 没有以普通方式管理原生 PHP 会话?

感谢任何帮助!

【问题讨论】:

Laravel 的session::get() 是否在主域和子域之间共享? 不,我正在尝试使用原版 $_SESSION 数组。 我不认为你可以跨域传递会话。虽然尚未验证 可以在子域之间,正如我所说的,会话在 laravel 未运行的两个子域之间共享,并且还使用 laravel 与两个子域一起工作,似乎 laravel 的会话与原版 PHP 的。 【参考方案1】:

或者 Laravel 没有以普通方式管理原生 PHP 会话?

正确。

把它放到你的 routes.php 文件的顶部:

Session::put('foo', 'bar');
die(print_r($_SESSION));

你会看到 Laravel 将会话放入一个多维数组中。

对我来说,“foo”会话包含在$_SESSION['_sf2_attributes']

【讨论】:

【参考方案2】:

您可能应该切换到 JWT(Json Web 令牌)。由于他们的设计,他们不会遇到这个问题。

请查看这篇文章了解更多信息: https://auth0.com/blog/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/

【讨论】:

【参考方案3】:

您可以通过设置在 laravel 中跨多个子域共享会话

config(session.domain, '.example.com');

或 在 .env 文件中

SESSION_DOMAIN='.example.com'

【讨论】:

以上是关于无法使用 Laravel 4 与子域共享会话的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 部署共享主机子域

Laravel与Socket.io Nodejs共享会话

Laravel 与子域共享主机

跨子域访问会话(Rails 4)

Laravel 多域会话

拉拉维尔 |共享主机路由无法正常工作