【问题标题】:How do sessions work in Laravel 5会话如何在 Laravel 5 中工作
【发布时间】:2017-09-26 10:38:30
【问题描述】:

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

在 Laravel 中有两种主要的会话数据处理方式:全局会话助手和通过请求实例。

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

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

文档说:

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

但从来没有解释过有什么区别。

另一方面是“门面方式”:

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

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

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

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

顺便说一句,我可以让会话与 Redis 一起工作的唯一方法是使用最后两种方法。

提前感谢您的启发。

【问题讨论】:

  • 所有都是有效的,你可以使用任何人,关于半径我没有检查过。但所有其他作品都很完美。有些是 Facad,有些是帮助功能,让生活更轻松。 session() 是一个辅助函数。
  • 无论您选择哪种方式,它仍然只是指同一个会话,当我提到会话时,我的意思是相同的会话 ID 和与之关联的相同数据。您使用哪一个并不重要,因为它仍然是同一个会话。我使用会话助手是因为我发现它更方便。

标签: php session laravel-5


【解决方案1】:

让我们首先考虑外观:

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\SessionManager (https://laravel.com/docs/5.4/facades#facade-class-reference)。 Illuminate\Session\SessionManager 有一个 __call 函数,简而言之就是调用会话的驱动程序。所以这是相同的行为。

现在的区别可能在于$request 函数与所有其他函数(如文档中所写)。根据源代码,它返回一个\Symfony\Component\HttpFoundation\Session\SessionInterfaceSessionInterface 的方法与 Illuminate\Session\Store 不同,所以也许这就是它不同的原因。

好吧,我放弃了。很难理解。我不能再帮你了,我迷路了。我保留这篇文章以备历史需要。

【讨论】:

  • 感谢您的回答。所以如果我理解正确Session::put('key', 'value');session()->put('key', 'value');session(['key' => 'value']); 工作相同。现在$request->session()->put('key', 'value');对我来说仍然是个谜。
  • 对我来说同样的问题。 $request->session()->put('key', 'value'); 不同,我不明白为什么以及有什么不同。这就是我放弃的原因!
  • @louisfischer 你可能对stackoverflow.com/questions/42547684/…感兴趣
猜你喜欢
  • 1970-01-01
  • 2019-12-08
  • 2020-03-21
  • 2015-06-03
  • 2015-09-01
  • 2016-02-26
  • 2015-06-30
  • 2016-05-02
  • 2017-06-22
相关资源
最近更新 更多