【发布时间】:2012-03-14 00:34:11
【问题描述】:
我做了一个 GetVaryByCustomString 返回:
context.User.Identity.IsAuthenticated.ToString();
但是我有一个大问题,想象一下这个流程:
用户(或任何人)访问主页。 GetVaryByCustomString 将返回“false”并缓存它。每次有人问首页是否有变化,都会返回304。
我在站点登录并转到主页,GetVaryByCustomString 返回“true”,然后不使用缓存。每次我访问主页时,ASP.NET 都会返回 304。
-
我注销并转到主页,现在 GetVaryByCustomString 由于第一步返回 304,但 OutputCache 不知道我拥有的缓存来自登录用户。
李>
如果我按Ctrl+F5,它就可以工作,因为问题出在浏览器/服务器上,服务器端缓存是好的。但它返回 304,并且我缓存了一个记录页面。
有什么解决办法吗?还是我需要停止缓存经过身份验证的用户?
更新:我认为可变值的缓存不起作用。它需要浏览器也按此值缓存....并且不存在因 Cookie 而异...
【问题讨论】:
-
就个人而言,我建议不要为经过身份验证的用户缓存(但仍为他们缓存静态资源)。这就是 Stack Overflow/Stack Exchange 的做法。
-
我试图只在服务器上为 auth 用户缓存,但它似乎有一个错误,返回 304 + no-cache。现在我不为登录用户缓存,一切正常。
标签: c# asp.net-mvc caching outputcache browser-cache