在$ _SESSION变量中缓存变量?

时间:2008-12-11 22:30:05

标签: php session caching

我正在创建一个php web应用程序,用于存储未与其他用户共享的用户特定信息。

将一些此类信息存储在$ _SESSION变量中进行缓存是不是一个好主意?例如:缓存用户为其帐户创建的类别列表。

3 个答案:

答案 0 :(得分:11)

只要记住这一点,这将是对会话机制的恰当使用:

  • 会话不会无限期地持续存在。
  • 从会话中提取时,确保您确实得到了结果(如果会话已过期/清除,ASP.NET将返回NULL)
  • 服务器重启可能会擦除会话缓存。
  • 这样做是为了方便,而不是表现。对于高性能缓存,请选择适当的机制(即memcached

良好的使用模式将是这样的(以太cookie或会话):

  • 用户登录
  • 会话/ cookie中的商店偏好(背景颜色,最后10条记录,类别)。
  • 在呈现页面时,请参阅Session / Cookie值(确保它们是有效值而不是null)。

不在cookie中的事情

  • 不要存储任何敏感内容(使用会话)。
  • Cookie值不应授予/拒绝您访问任何内容(使用会话)。
  • 陷阱错误,假设标志和字符串可能不是您所期望的,可能会丢失,可能会在传输过程中更改。

我确信还有其他事情要考虑,但这只是我的头脑。

答案 1 :(得分:4)

这对于相对少量的数据可能效果很好,但您必须考虑一些事项:

  1. $ _ SESSION存储在请求,磁盘或数据库上的文件或其他内容之间,具体取决于您选择使用的内容(默认为文件)
  2. $ _ SESSION对于单台计算机上的单个用户来说是本地的。
  3. 会话有一个TTL(生存时间),他们在一段时间(你控制)后消失了
  4. 在某些情况下,会话可以阻止(很少出现问题,但我遇到了流式闪存) 如果您要缓存的数据要由多个用户访问,那么您最好单独缓存它。

答案 2 :(得分:2)

如果您只希望在会话期间提供此数据,那么是。如果您希望明天或4小时后可以使用它,则需要将其保存到数据库中。

从技术上讲,您可以将会话修改为具有很长的使用寿命,但是要意识到如果他们使用不同的计算机,不同的浏览器或刷新他们的cookie,他们将失去链接到他们的会话,因此任何严重的你应该创建一种类型的应用程序中的用户帐户,将会话链接到他们的帐户并将数据保存在渗透位置。