11

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

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

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

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

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

提前致谢!

4

1 回答 1

8

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

于 2013-08-26T04:57:43.893 回答