ASP.NET MVC AntiForgeryToken和Caching

chr*_*chu 11 caching antiforgerytoken asp.net-mvc-4

我目前正在研究一个ASP.NET MVC项目,并发现了一个看起来很奇怪的错误.

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

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

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

特别是默认的ASP.NET MVC模板包含AntiForgeryTokens但不禁用缓存(因此对上述错误开放)的事实让我很奇怪.

提前致谢!

rob*_*ich 7

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

  • “禁用表单缓存”是什么意思? (2认同)