【问题标题】:Cannot share session with subdomains with Laravel 4无法使用 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 的。

标签: php session laravel subdomain


【解决方案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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 2013-09-22
        相关资源
        最近更新 更多