【问题标题】:HTTP Caching, User Authentication and PHPHTTP 缓存、用户身份验证和 PHP
【发布时间】:2012-01-25 00:45:19
【问题描述】:

我正在使用 PHP 开发一些软件,并且正在尝试使其有效地利用 HTTP 缓存。但是,我最近遇到的问题之一是登录后,登录之前访问的页面被缓存并且不像登录一样。

如果 PHP 和客户端之间存在 HTTP 缓存,这尤其是一个问题。如果我将缓存限制器设置为始终为“公共”,则该页面可能会始终被缓存(即使是通过代理缓存。)如果我在未登录时将缓存限制器设置为“公共”,而在登录时将其设置为“私有”在,我目前遇到的问题可能仍然会发生。如果我将缓存限制器设置为始终为私有,则代理缓存根本不会受益,并且我目前遇到的问题可能仍然会发生。

这个问题的理想解决方案是什么?有没有办法在用户登录后让网络浏览器“重试”?对于代理缓存,我知道有一些方法可以根据传入的 cookie 进行缓存,所以我相信这可以解决部分问题。但是从网络浏览器的角度来看问题呢?

【问题讨论】:

  • must-revalidateproxy-revalidate 会是这里的神奇关键字吗?
  • 哦,我忘了must-revalidate...你可能是对的。不过,我确实相信它会导致 nginx(作为缓存代理)不缓存。我该怎么办?我想在这里使用 nginx。
  • 其实我弄错了。我阅读了这个主题(因为我从来不记得这些),这仅意味着缓存的副本必须在副本过时后重新验证。
  • 哦,好吧。在此期间,我将做更多的研究。不过,感谢您的尝试。
  • 只是一个想法...您是否提供了带有 Expires/Last-Modified 标头的 ETag?您可以使用登录用户的 ID(或类似 ID)重新散列 ETag,或者干脆不为登录用户使用服务器。虽然我猜中间的激进代理可能仍然存在问题。

标签: php http caching http-caching


【解决方案1】:

这里没有很好的解决方案,但您有几个选择:

  1. 无论您的用户是登录还是登录,都使页面真正相同 不是,通过使用 AJAX 通过 JSON 请求登录状态 服务。
  2. 不缓存页面,只缓存脚本、样式和图像。 HTML 的浏览器缓存仅在您的用户不断查看 相同的页面,而不是期望不同的结果。这是你的吗 用例?如果是,您可能已经在使用 AJAX 来提供 实时更新,实施起来可能不是一个巨大的飞跃 选项 #1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多