【问题标题】:What is the real difference between Laravel's session() and request()->session()?Laravel 的 session() 和 request()->session() 的真正区别是什么?
【发布时间】:2017-12-16 23:40:44
【问题描述】:

我正在研究一个严重依赖会话的 Laravel(5.2) 项目,虽然很新,但我只是好奇 global session() 和 Http request()->session() 除了它们具有不同的访问方式之外还有什么区别并写入会话?

这是我从laravel 5.4 doc 那里获得的一些信息,

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

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

谢谢

【问题讨论】:

    标签: php laravel session laravel-5.2


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的宝贵回答@tete0148 确实我意识到这些是帮手,我同意。尽管我还没有正确调查为什么 Laravel 将会话与使用会话本身分开访问。引起这种观察的原因是 Laravel 文档本身关于它们都有的差异的文本。所以不幸的是,我仍然必须检查我是否能找到不同之处,然后我才能如实真诚地说“是”,我同意。
    • 当我试图检查核心如何使用请求基类实现会话时,我更加确信一般会话可能与 *in operation 有点不同http 的,即来自 Request 类的。
    • 我在回复中澄清了这一点。这不仅仅是一个捷径,建议坚持使用全局 session() 或 request()->session()。该文件清楚地表明存在实际差异,这在开发过程中确实非常明显。所以,你的断言是非常错误的!
    【解决方案2】:

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

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

    你可以这样使用它

    public function testMyMethod(Request $request){
    
        //$userExist = $request->session()->exists('user_id');
        $userExist = $request->session()->has('user_id');
    
    }
    

    【讨论】:

      【解决方案3】:

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

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

      “没有区别,只是捷径。”

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

      【讨论】:

      • 我认为你的问题的答案是因为 Laravel 在请求生命周期结束时存储会话值。
      • 是的,这是有道理的,也许是无法检索存储值的原因
      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 2019-08-25
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2015-12-05
      • 1970-01-01
      相关资源
      最近更新 更多