我正在开发一个需要在自定义php项目之外工作的laravel项目,因为我需要在laravel应用程序中访问纯PHP全局变量$ _SESSION和$ _COOKIE。
到现在为止,我只是空或空。有人知道怎么做吗?
答案 0 :(得分:4)
Laravel有自己的$_SESSION
和$_COOKIE
实现,所以我担心你无法通过那些超级全局访问它们。
为了尝试克服这个问题,您可以在Laravel应用程序中通过执行以下操作将数据从一个传输到另一个:
foreach(Session::all() $key => $value)
{
$_SESSION[$key] = $value;
}
答案 1 :(得分:1)
几个月前我和CakePHP有类似的问题。基本上,Cake应用程序中的会话变量完全独立于我们所拥有的定制应用程序中的会话变量。问题是Cake使用与PHPSESSID不同的会话标识符。最后,我被迫通过强制Cake使用PHPSESSID弥补差距。我对Laravel不太熟悉,但从我所看到的(在他们的主站点上),他们似乎使用“laravel_session”而不是PHPSESSID。这很可能是您的问题,而且在官方的Laravel论坛上似乎有topic about this。
答案 2 :(得分:1)
会议的答案非常简单,我不相信它会真正发挥作用。
我在想Laravel会以某种方式覆盖普通PHP会话的默认行为。也许在幕后声明自定义session_handler
或其他魔法。
感谢我在这里得到的所有答案,我发现Laravel实际上并没有使用$ _SESSION,它实现了一个完全不同的驱动程序。
因此,为了获得对外部会话的一致,我只使用纯PHP中的本地session_start()
和session_name()
,现在我可以访问全局$_SESSION
中的所有数据保存侧项目中使用的名称空间相同。
对于cookies,我无法弄清楚如何做到这一点,来自Laravel应用程序:/。但只是通过会话,我可以继续并合并应用程序。
答案 3 :(得分:0)
Laravel有自己的那些全局变量的实现,但你可以通过Symfony请求类访问它们 - 这是Laravel请求的父级。 Symfony直接使用全局变量。
会话:
Request::getSession();
的Cookie:
$cookie = new ParameterBag($cookie_name);
答案 4 :(得分:0)
我遇到了与cookie类似的问题,它们没有被laravel设置,而Cookie :: get()返回null。这是因为laravel加密了他们的cookie。您可以不包含EncryptCookies
中间件来避免此问题。从\App\Http\Middleware\EncryptCookies::class
$middlewareGroups
移除app\Http\Kernel.php