无法使用 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 与子域共享会话的主要内容,如果未能解决你的问题,请参考以下文章