会话如何在 Laravel 5 中工作
Posted
技术标签:
【中文标题】会话如何在 Laravel 5 中工作【英文标题】:How do sessions work in 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 controller。 train_fox这样指出:
session()->put('key', 'value');
所以总共有四种方式。而且我无法弄清楚为什么或何时使用一种或另一种。有人知道这四个之间的区别吗?
顺便说一句,我可以让会话与 Redis 一起工作的唯一方法是使用最后两种方法。
提前感谢您的启发。
【问题讨论】:
所有都是有效的,你可以使用任何人,关于半径我没有检查过。但所有其他作品都很完美。有些是 Facad,有些是帮助功能,让生活更轻松。session()
是一个辅助函数。
无论您选择哪种方式,它仍然只是指同一个会话,当我提到会话时,我的意思是相同的会话 ID 和与之关联的相同数据。您使用哪一个并不重要,因为它仍然是同一个会话。我使用会话助手是因为我发现它更方便。
【参考方案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\SessionInterface
。 SessionInterface
的方法与 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 你可能对***.com/questions/42547684/…感兴趣以上是关于会话如何在 Laravel 5 中工作的主要内容,如果未能解决你的问题,请参考以下文章
如何从数据库中获取数据以及会话如何在 laravel 中工作? [复制]
Ckeditor 不能在 laravel 5.5 的 vue js 中工作
会话如何在 Express.js 和 Node.js 中工作?