请教 session 闪存、自定义驱动及清除等的一些问题

**Q**
谢谢大家,我是新手,请教几个不明白的问题,
  1. $request->session()->pull('key','default')$request->session()->forget('key')的区别之处?
  2. 重新生成SessionID后,这个id我们有用到吗,主要是用来干啥的?
  3. flashreflash的区别是啥?flash的保留到下次请求之前和keep的只保留一次有何异同?
  4. 自定义驱动部分有openclose都不用写内容,readwrite写的代码内容是从数据库中读和存的操作吗?
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案
  1. 引用文档:

    pull 方法可以只使用一条语句就从 Session 中检索并删除一条语句

    forget 方法会从 Session 中删除指定数据

    由此可见,pull 方法在删除该条数据的同时,将会返回该数据的值,你可以通过返回值接收;而 forget 方法则是直接删除,并不会返回该数据的值。你可以通过这两个词的英文语义来区分它们。

  2. 在你的业务逻辑代码内是不需要关心这一点的,Laravel 会自动处理。有兴趣的话可以了解下 Web 应用中 Session 机制和 Cookies 的关系,实际上 Session 的数据是存储在服务端的,浏览器端只是通过 Cookie 来存储该 Session 数据的 ID。

  3. 由于中文文档翻译不准确的原因,我重新查阅了官方对于 reflash() / flash() / keep() 方法的描述

    Sometimes you may wish to store items in the session only for the next request. You may do so using the flash method. Data stored in the session using this method will only be available during the subsequent HTTP request, and then will be deleted. Flash data is primarily useful for short-lived status messages

    If you need to keep your flash data around for several requests, you may use the reflash method, which will keep all of the flash data for an additional request. If you only need to keep specific flash data, you may use the keep method

    也就是说,当你执行 flash() 方法,在第二次请求后这些一次性数据将被删除。如果你想在第二次请求内让这些数据保留到第三次请求,那就需要执行 reflash(),如果你只想让一部分数据保留到第三次请求,那就使用 keep() 方法即可。以此类推,可以每次请求都给这些数据「续命」一次😂。

  4. 不一定,具体看是什么驱动,文件驱动写文件,数据库驱动写数据库。你也可以写到任何自己想要实现的地方。

5年前 评论
讨论数量: 3
  1. 引用文档:

    pull 方法可以只使用一条语句就从 Session 中检索并删除一条语句

    forget 方法会从 Session 中删除指定数据

    由此可见,pull 方法在删除该条数据的同时,将会返回该数据的值,你可以通过返回值接收;而 forget 方法则是直接删除,并不会返回该数据的值。你可以通过这两个词的英文语义来区分它们。

  2. 在你的业务逻辑代码内是不需要关心这一点的,Laravel 会自动处理。有兴趣的话可以了解下 Web 应用中 Session 机制和 Cookies 的关系,实际上 Session 的数据是存储在服务端的,浏览器端只是通过 Cookie 来存储该 Session 数据的 ID。

  3. 由于中文文档翻译不准确的原因,我重新查阅了官方对于 reflash() / flash() / keep() 方法的描述

    Sometimes you may wish to store items in the session only for the next request. You may do so using the flash method. Data stored in the session using this method will only be available during the subsequent HTTP request, and then will be deleted. Flash data is primarily useful for short-lived status messages

    If you need to keep your flash data around for several requests, you may use the reflash method, which will keep all of the flash data for an additional request. If you only need to keep specific flash data, you may use the keep method

    也就是说,当你执行 flash() 方法,在第二次请求后这些一次性数据将被删除。如果你想在第二次请求内让这些数据保留到第三次请求,那就需要执行 reflash(),如果你只想让一部分数据保留到第三次请求,那就使用 keep() 方法即可。以此类推,可以每次请求都给这些数据「续命」一次😂。

  4. 不一定,具体看是什么驱动,文件驱动写文件,数据库驱动写数据库。你也可以写到任何自己想要实现的地方。

5年前 评论
  1. 引用文档:

    pull 方法可以只使用一条语句就从 Session 中检索并删除一条语句

    forget 方法会从 Session 中删除指定数据

    由此可见,pull 方法在删除该条数据的同时,将会返回该数据的值,你可以通过返回值接收;而 forget 方法则是直接删除,并不会返回该数据的值。你可以通过这两个词的英文语义来区分它们。

  2. 在你的业务逻辑代码内是不需要关心这一点的,Laravel 会自动处理。有兴趣的话可以了解下 Web 应用中 Session 机制和 Cookies 的关系,实际上 Session 的数据是存储在服务端的,浏览器端只是通过 Cookie 来存储该 Session 数据的 ID。

  3. 由于中文文档翻译不准确的原因,我重新查阅了官方对于 reflash() / flash() / keep() 方法的描述

    Sometimes you may wish to store items in the session only for the next request. You may do so using the flash method. Data stored in the session using this method will only be available during the subsequent HTTP request, and then will be deleted. Flash data is primarily useful for short-lived status messages

    If you need to keep your flash data around for several requests, you may use the reflash method, which will keep all of the flash data for an additional request. If you only need to keep specific flash data, you may use the keep method

    也就是说,当你执行 flash() 方法,在第二次请求后这些一次性数据将被删除。如果你想在第二次请求内让这些数据保留到第三次请求,那就需要执行 reflash(),如果你只想让一部分数据保留到第三次请求,那就使用 keep() 方法即可。以此类推,可以每次请求都给这些数据「续命」一次😂。

  4. 不一定,具体看是什么驱动,文件驱动写文件,数据库驱动写数据库。你也可以写到任何自己想要实现的地方。

5年前 评论

@Wi1dcard 非常感谢,您讲的很细致 ,学习到了,谢谢您

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!