Drupal 8 - 什么是PrivateTempStoreFactory及其目的?

时间:2017-08-15 20:30:38

标签: drupal-8

  1. 这与php $ _sessions相同吗? 它是否使用php $ _sessions? (编辑)的
  2. 我什么时候应该使用它?
  3. 使用它有哪些缺点?
  4. 可以或应该使用它来存储用户输入和表单结果以供以后操作吗?
  5. 它安全吗? (编辑)的

2 个答案:

答案 0 :(得分:2)

这里有一篇关于Storing Session Data with Drupal 8的非常好的文章 它涵盖了你所有的问题和所有问题。更多!

看一下,作者还会给你很多其他的链接来帮助你。

这里有一个简短的总结:

<强> 1。这与php $ _sessions相同吗?

大致相当。但是(并且它是一个重要的但是)使用Drupal 8服务提供了与全局构造交互所需的抽象和结构。它是整体架构的一部分,允许开发人员可持续地构建和扩展复杂的应用程序。

<强> 2。我什么时候应该使用它?

在以前版本的Drupal中,我可能只是在$ _SESSION中抛出数据。在Drupal 8中,有一项服务;实际上,有两个服务:使用user.private_tempstore和user.shared_tempstore分别临时存储用户特定数据和非用户特定数据。

第3。使用它有什么不利之处?

了解公安。

<强> 4。我可以或应该使用它来存储表单中的用户输入以供以后操作吗?

应该。

答案 1 :(得分:0)

私有临时存储与会话存储有很大的不同,不是旨在替代。

  1. 对于已登录的用户,会话是完全不相关的,临时存储中存储的数据将在给定用户的当前和将来的所有会话之间共享。
  2. 仅对于匿名用户而言,会话是相关的:如果他们的会话到期,则内容将不再可检索,因为它与会话ID绑定在一起。但是,匿名用户也不会将数据存储在会话存储中,只有会话ID是相关的。
  3. 数据在名为tempstore.expire的容器参数上设置的时间后过期,该参数与会话cookie的生存期无关(后者也与登录用户无关)。
  4. 每个数据都有相关的元数据:所有者(登录的用户ID或会话ID)和更新时间。
  5. 耐久性期望完全不同。会议基本上是短暂的。许多地方会将会话绑定到IP地址。它当然是绑定到浏览器,也就是设备。作为必然的结果,如果客户不能期望会话持续下去,则服务器没有理由紧紧抓住它们:将会话存储置于快速但不持久的存储(例如,内存缓存等)是完全有效的加速策略。但是,私有临时存储是持久性的-当然会过期。要存储在会话中的典型事情是“刷新”消息-您用drupal_set_message设置的消息。如果您设置一个这样的会话,那么会话会丢失,哦,好。是的,通知用户会很好,但是哦。我当然不希望看到跨浏览器和设备跟随我的即兴消息。
  6. 理论上,存储在私有临时存储中的典型事物是购物车。实际上,之所以没有这样做,是因为a)如果不是对最终用户而是对后台来说有价值的推车,而不是临时数据b)当用户登录时,会迁移他们的会话数据,但不会迁移他们的临时存储。这是否是一个可争议的错误,在撰写本文时,我找不到有关此问题的核心问题。这可能是不利的。因此,像复杂编辑这样的Views UI是一种可能的用例,但请注意,Views UI本身使用的是共享的临时存储工具,而不是私有的。实际上,我可以找到的唯一用法是节点预览。