我最近使用 memcached 实现了全站缓存在我的 Django 应用程序中,我设置了 TTL到大约 500 秒,并在 Web 应用程序的其他部分实现每个 View 的缓存。
我遇到的问题是,当用户注销时,因为它是一个表单,网站的行为符合预期,但是如果他们随后转到网站的受密码保护的部分,应用程序的行为就好像他们仍然登录一样,除非他们点击“刷新”。 我是缓存的新手,想知道我是否可以采取任何明智的措施来防止这种情况发生?
最佳答案
我遇到了类似的问题。标准的 Django 方法是为经过身份验证的用户禁用缓存。
#settings.py
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
如果不同的用户看到不同的页面(例如:他们在页面上的用户名)并且您不能为他们提供一个版本,它会正常工作。
但是如果只有 2 个版本的页面:对于经过身份验证的用户和其他人,那么完全禁用经过身份验证的用户的缓存是不好的。我写了一个app除此之外,还可以在这种情况下微调缓存。
更新。
顺便说一句:您提到当您单击“刷新”时会收到正确版本的页面。这意味着问题出在客户端缓存(Expires header 或 E-tag),而不是服务器缓存。
要防止客户端缓存(如果您在同一 URL 下有多个版本的页面,则必须这样做)使用 @cache_control(must_revalidate=True)
装饰器。
关于python - 使用 Django 进行站点范围的缓存 - 注销时密码保护页面的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608521/