7

我正在尝试在具有许多子域的主机上使用 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 会话?

任何帮助表示赞赏!

4

3 回答 3

0

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

正确的。

将其放入您的 routes.php 文件的顶部:

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

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

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

于 2013-09-27T15:16:15.510 回答
0

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

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

于 2016-04-04T14:13:59.867 回答
0

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

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

或在 .env 文件中

SESSION_DOMAIN='.example.com'
于 2019-08-22T05:00:11.373 回答