我做了一个 GetVaryByCustomString 返回:
context.User.Identity.IsAuthenticated.ToString();
但我有一个大问题,想象一下这个流程:
用户(或任何人)访问主页。 GetVaryByCustomString 将返回“false”并将其缓存。每次有人问首页有没有变化,都会返回304。
我在站点登录并转到主页,GetVaryByCustomString 返回“true”,然后不使用缓存。每次我转到主页时,ASP.NET 都会返回 304。
我注销并转到主页,现在 GetVaryByCustomString 返回 304,因为第一步,但 OutputCache 不知道我拥有的缓存来自登录用户。
<
如果我按 Ctrl+F5,它会起作用,因为问题出在浏览器/服务器中,服务器端缓存没问题。但它返回 304,并且我缓存了一个记录页面。
有什么解决办法吗?还是我需要停止缓存经过身份验证的用户?
更新:我认为可变值的缓存不起作用。它需要浏览器也按此值进行缓存....并且不存在随 Cookie 变化...
最佳答案
我们最终所做的是包括 SO 在内的大多数网站所做的:用关于当前用户的零信息缓存页面。
使用 AJAX,获取谁是当前用户并根据他们操作页面。
示例:成员(member)个人资料上的关注/取消关注按钮。呈现缓存页面时不执行当前用户是谁的逻辑。页面加载后,使用 AJAX 访问服务器,检查当前用户是否关注并相应地更改按钮状态。
关于c# - 用户输出缓存。我注销时的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9694324/