【问题标题】:MVC 3 partial cachingMVC 3 部分缓存
【发布时间】:2012-08-02 11:47:52
【问题描述】:

我知道以前有人问过这个问题,但我对最佳方法感到困惑,所以请原谅我再次问...

我有一个 MVC3 应用程序,它将成为一个外联网,允许用户通过表单身份验证登录。用户将访问机密信息,因此,为了防止有人在他们注销后点击返回(并且我注销 FormsAuthentication),我禁用了所有缓存,强制重定向到登录页面。

从安全的角度来看,一切都很好,但我的问题是我想缓存页面的非安全元素,例如图像、背景、徽标等。

目前,每个页面都呈现出难看的闪烁,因为每次都在下载我的所有作品。

当然,这也会对带宽产生负面影响。

如何控制缓存,以使艺术品、css、脚本等得到缓存,同时防止在 FormsAuthentication SignOut 问题后出现可怕的返回按钮?

提前谢谢你,

西蒙。

【问题讨论】:

  • 您是否尝试在您的静态内容的 iis 自定义标头部分中为将来的日期添加过期标头?
  • 您好,我实际上创建了一个新的 SecureController 类,它是 Controller 的后代。在重写的 OnResultExecuting 方法中,我有以下代码可以关闭所有缓存:'Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache); Response.Cache.SetNoStore();'我应该在哪里设置静态内容的过期标头?
  • 我相信 John Mitchell 的回答更好地解释了我的问题。您的代码只影响 html 页面输出,它应该影响静态内容。

标签: c# asp.net-mvc security caching formsauthentication


【解决方案1】:

假设图像不是动态生成的,您可以在内部通过 MVC 或使用 IIS 来生成。

在内部,您需要提供所有图片并设置过期时间。

如果您使用 IIS,它会变得简单得多,您只需将 IIS 自定义标头部分中的过期标头编辑为将来的日期(过去的日期会自动使其过期)。如果您希望确保图像不被缓存,请向其添加查询字符串

<img src="image.png?dummy=8sn7ahh2" />

然后图像也不会被缓存,因此您基本上想要缓存所有图像,然后将您不想缓存的图像列入黑名单(使用查询字符串)。

这里有一个nice example,关于如何为 IIS7 打开/关闭它

【讨论】:

  • 您好,这是一个 Windows Azure 云项目,如果可以的话,我不想玩 IIS,因为每次我重新打包和部署应用程序时,我都必须再次更改设置。另外,我不确定是否可以选择提供图像,因为我只想将文件上的静态图像链接到静态 css 文件。
  • 局部视图缓存是否合适?换句话说,如果我允许应用程序通常缓存所有内容,但在我显示当前登录用户名的标题中,阻止缓存并因此强制访问服务器。如果用户单击“返回”,是否有办法使整个页面重定向到我的登录页面?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 2023-03-29
相关资源
最近更新 更多