会话如何在Laravel 5中运行

时间:2017-04-28 10:29:43

标签: php session laravel-5

我试图了解会话如何在Laravel 5(.4)中运行。 一方面有两种方法可以使用它们,如the official documentation中所述:

  

在Laravel中使用会话数据有两种主要方式:全局会话帮助程序和通过Request实例。

$request->session()->put('key', 'value');

session(['key' => 'value']);

文档说:

  

通过HTTP请求实例使用会话与使用全局会话帮助程序之间几乎没有实际区别。

但从未解释过它的区别。

另一方面,有#34; Facade方式":

Session::put('key', 'value');

最近我发现了这个Stack Overflow问题How to use session in laravel 5.2 controllertrain_fox以这种方式指出:

session()->put('key', 'value');

所以这总共有四种方式。我无法弄清楚为什么或何时使用这些或其他。有人知道这四个之间的区别吗?

顺便说一句,我能用Redis进行会话的唯一方法就是最后两种方式。

提前感谢您的启蒙。

1 个答案:

答案 0 :(得分:2)

让我们首先考虑Facade:

Session::put('key', 'value');

此外墙呼叫Illuminate\Session\Store::put()

现在让我们考虑函数session()

function session($key = null, $default = null)
{
    if (is_null($key)) {
        return app('session');
    }

    if (is_array($key)) {
        return app('session')->put($key);
    }
    // ...
}

阅读此内容,我们可以假设session(['a' => 'b'])session()->put('a', 'b')的工作方式类似(因为如果它是一个数组,则会在同一个函数上调用put)。

app('session')返回Illuminate\Session\SessionManagerhttps://laravel.com/docs/5.4/facades#facade-class-reference)。 Illuminate\Session\SessionManager具有__call函数,简称为会话的驱动程序。所以它的行为是一样的。

现在差异可能在于$request功能与其他所有功能(因为它是在文档中编写的)。根据源代码,它返回\Symfony\Component\HttpFoundation\Session\SessionInterfaceSessionInterface的方法与Illuminate\Session\Store的方法不同,所以可能与它有所不同。

好的,我放弃了。这很难理解。我无法帮助你,我迷失了。我保留这篇文章以了解历史需求。