gpt4 book ai didi

asp.net-mvc - 为什么即使使用静态机器 key ,HttpAntiForgeryException 也会随机发生?

转载 作者:行者123 更新时间:2023-12-03 13:58:35 24 4
gpt4 key购买 nike

我们有一个在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com