c# - 用户输出缓存。我注销时的错误

标签 c# asp.net-mvc caching outputcache browser-cache

我做了一个 GetVaryByCustomString 返回:

context.User.Identity.IsAuthenticated.ToString();

但我有一个大问题,想象一下这个流程:

  1. 用户(或任何人)访问主页。 GetVaryByCustomString 将返回“false”并将其缓存。每次有人问首页有没有变化,都会返回304。

  2. 我在站点登录并转到主页,GetVaryByCustomString 返回“true”,然后不使用缓存。每次我转到主页时,ASP.NET 都会返回 304。

  3. 我注销并转到主页,现在 GetVaryByCustomString 返回 304,因为第一步,但 OutputCache 不知道我拥有的缓存来自登录用户。

    <

如果我按 Ctrl+F5,它会起作用,因为问题出在浏览器/服务器中,服务器端缓存没问题。但它返回 304,并且我缓存了一个记录页面。

有什么解决办法吗?还是我需要停止缓存经过身份验证的用户?

更新:我认为可变值的缓存不起作用。它需要浏览器也按此值进行缓存....并且不存在随 Cookie 变化...

最佳答案

我们最终所做的是包括 SO 在内的大多数网站所做的:用关于当前用户的零信息缓存页面。

使用 AJAX,获取谁是当前用户并根据他们操作页面。

示例:成员(member)个人资料上的关注/取消关注按钮。呈现缓存页面时不执行当前用户是谁的逻辑。页面加载后,使用 AJAX 访问服务器,检查当前用户是否关注并相应地更改按钮状态。

关于c# - 用户输出缓存。我注销时的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9694324/

相关文章:

c# - EF5 ObjectContext : How to replace IQueryable<T>. 包含(路径)与 context.T.Attach()

c# - 编译器琐事 : What is consequence of this code

asp.net-mvc - 逐步将现有 ASP.NET 站点转换为 MVC 的最佳方法

javascript - 将 javascript 验证传递给 mvc3 中的动态文本框

caching - 当文件从 VirtualPathProvider 作为 Stream 返回时维护文件的缓存控制属性

python - 是否可以让 grequests 和 requests_cache 一起工作?

c# - 更新 EF 中的实体属性,其中属性是另一个实体

c# - 未应用数据模板

asp.net-mvc - 当浏览器调整大小时,防止页面上的各个部分被重新定位的机制是什么

python - 无法删除 Django 中特定条目的缓存