Laravel 的 session() 和 request()->session() 之间的真正区别是什么?

What is the real difference between Laravel's session() and request()->session()?

我正在开发一个严重依赖会话的 Laravel(5.2) 项目,虽然很新,但我只是好奇全局 session() 和 Http request()->session() 有什么区别因为他们有不同的访问和写入会话的方式?

以下是我从 laravel 5.4 文档

获得的关于此的一些信息

不幸的是,这并不能真正让我理解其中的区别。我也 google 和 Whosebuged 也许我能找到无济于事的答案。示例是 laravel difference of session::flash and request->session->flash 但我对答案不太满意

他们在管理会话数据方面的真正区别是什么?我不介意参考文档,即使我必须深入研究 laravel 核心。

谢谢

session() 是一个帮助程序,可以让您更快地访问 request()->session()

请注意,request() 也是一个帮助程序,可让您更快地访问请求对象。

没有区别,只是一个捷径。

我认为这会对您有所帮助: $request->session() 和 session() 都是一样的。

在 Laravel 中有两种处理会话数据的主要方法:session() 助手中的全局函数和通过 $request 实例。

你可以这样使用它

public function testMyMethod(Request $request){

    //$userExist = $request->session()->exists('user_id');
    $userExist = $request->session()->has('user_id');

}

遗憾的是,最佳答案已经在Laravel注释中给出了;我现在只能证明这一点,因为我曾经注意到过这种情况。

我不明白为什么全局 session('key') 拒绝在同一方法中回显 $request->session()->put('key', 'value') 的值。希望我能再次遇到这种情况只是为了证明,但我想给你的最后回复是:

"There are no differences, it's just a shortcut."

因为就像提到的文档一样,在实践中存在显着差异