【问题标题】:ASP.NET MVC AntiForgeryToken and CachingASP.NET MVC AntiForgeryToken 和缓存
【发布时间】:2013-07-22 05:20:33
【问题描述】:

我目前正在处理一个 ASP.NET MVC 项目,遇到了一个看起来很奇怪的错误。

在 ASP.NET MVC 模板中,表单总是得到一个 AntiForgeryToken(因此让我相信这是一个最佳实践)。然而,AntiForgeryTokens 似乎不适用于缓存。

例如,当我打开一个包含 AntiForgeryToken 的表单的站点并复制浏览器窗口时,两个窗口都具有完全相同的 AntiForgeryToken,从而导致在发布表单时出现异常。禁用缓存时不存在此问题(通过 ActionFilter NoCache,请参阅Disable browser cache for entire ASP.NET website)。

所以我想我的问题是:应该是这样吗?除了禁用缓存之外,还有其他方法可以解决问题吗?

尤其是默认的 ASP.NET MVC 模板包含 AntiForgeryTokens 但不禁用缓存(因此对上述错误持开放态度)这一事实让我感到疑惑。

提前致谢!

【问题讨论】:

  • 你能发布你的代码和确切的错误吗? Html.AntiforgeryToken() 每次都会生成一个新的令牌,所以在两个浏览器窗口中你应该有不同的值
  • 如果浏览器不向服务器查询第二个浏览器窗口但使用其缓存,则不会。

标签: caching asp.net-mvc-4 antiforgerytoken


【解决方案1】:

这是预期的行为。缓存很好地缓存了答案,包括 AntiForgeryToken 的值。禁用表单缓存,尤其是使用 AntiForgeryToken 的页面。如果您进一步考虑这一点,如果您在数据输入应用程序中,您是否要缓存您的数据输入表单?可能不是。但是,您确实希望缓存大量报告——即使它只是微缓存——一两秒钟。

【讨论】:

  • “禁用表单缓存”是什么意思?
  • 任何时候接受用户输入。基本上任何时候你都有<form> 标签或<input> 标签。
猜你喜欢
  • 2018-06-11
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2010-12-27
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多