- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个在 Windows Azure(最新 2.x 操作系统版本)上运行的 ASP.NET MVC 2 (.NET 4) 应用程序,具有两个 Web 角色实例。
我们对所有 POST 请求使用 MVC 提供的防伪 token ,并且在 web.config 中设置了静态机器 key ,因此一切都可以在多台机器上和重新启动时运行。 99.9% 的情况下它都能完美运行。
但是,我们时不时地会记录 HttpAntiForgeryException,并显示消息“未提供所需的防伪 token 或该 token 无效。”
我知道问题可能是浏览器不允许 cookie,但我们已经验证了 cookie 已启用并且正确地来回发送。
该错误在多种浏览器中都会发生,并且显然会给用户带来问题,因为他们必须重复操作,否则可能会丢失一些数据。可以说,我们无法在本地重现该问题,但它只发生在 Windows Azure 上。
为什么会发生这种情况?我们该如何避免呢?
最佳答案
我最近也遇到了这个问题,发现了两个原因。
<强>1。浏览器恢复打开缓存页面的最后一个 session
如果您有一个可缓存的页面,该页面向您的服务器执行发布操作(即防伪功能将打开),并且用户将其浏览器设置为在启动时恢复上次 session (Chrome 中存在此选项),则该页面将从缓存渲染。但是,请求验证 cookie 不会存在,因为它是浏览器 session cookie,并且在浏览器关闭时会被丢弃。由于 cookie 消失了,您将获得防伪异常(exception)。解决方案:返回响应头,使页面不被缓存(即Cache-Control:private, no-store)。
<强>2。如果在启动您的网站时打开多个选项卡,则会产生竞争条件
浏览器可以选择在启动时打开一组选项卡。如果其中多个访问您的网站并返回请求验证 cookie,您可能会遇到竞争条件,其中请求验证 cookie 被覆盖。发生这种情况是因为未设置请求验证 cookie 的用户向您的服务器发出了多个请求。第一个请求被处理并设置请求验证 cookie。接下来处理第二个请求,但它没有发送 cookie(在请求时尚未设置),因此服务器生成一个新的 cookie。新的页面会覆盖第一个页面,现在该页面在下次执行发布时将收到防伪请求异常。 MVC 框架不处理这种情况。此错误已报告给 Microsoft 的 MVC 团队。
关于asp.net-mvc - 为什么即使使用静态机器 key ,HttpAntiForgeryException 也会随机发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9922858/
我有一个 C# .NET MVC 应用程序,我收到“无法解密防伪 token ”。我不知道错误在哪里,我需要帮助解决这个问题。我正在我的本地主机上运行这个应用程序。以下是我遇到的错误。 Server
我们有一个在 Windows Azure(最新 2.x 操作系统版本)上运行的 ASP.NET MVC 2 (.NET 4) 应用程序,具有两个 Web 角色实例。 我们对所有 POST 请求使用 M
场景如下: 我有一个登录页面,当用户签名时,它会被重定向到主应用程序页面。然后用户正在使用浏览器后退按钮,现在他在登录页面上。他尝试再次登录,但现在抛出异常: HttpAntiForgeryExcep
我在 ASP.NET MVC 表单中使用 AntiForgeryToken。如果我在浏览器中停用 cookie 并发送来自,我会收到以下错误消息: 未提供所需的防伪 token 或该 token 无效
我是一名优秀的程序员,十分优秀!