python - 使用 Django 进行站点范围的缓存 - 注销时密码保护页面的问题

标签 python django memcached

我最近使用 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/

相关文章:

Python程序使用numpy和Scipy计算三重积分?

django - 有条件地选择序列化程序

python - 使用 memcached.sock 路径连接到 python-memcached

.net - Memcached 是否可以与 ASP.NET 状态服务器互换?

ruby-on-rails - 如何使用正则表达式删除 memcached 中的键(使用 Dalli+RoR)。

python - 将定位器存储在变量中

python - 如果在python中发生错误,则处理异常

python - 查找一组经过过滤的组合的算法

django - 在 django-filters 的 FilterSet 中使用全文搜索的最佳方式?

django - 可以在 Django 抽象模型中使用多重继承吗?