【问题标题】:Anti Forgery cookie missing in Internet ExplorerInternet Explorer 中缺少防伪 cookie
【发布时间】:2017-01-13 23:29:07
【问题描述】:

这是我的 MVC 5 应用程序中的场景:

我有一个包含@Html.AntiForgeryToken() 的登录表单 我有一个控制器,它的登录后操作用 ValidateAntiForgeryToken

装饰

一切都按预期工作,除非我在 IE 中运行该网站(在我的例子中是 v.11)

我通过 Fiddler 运行请求,发现使用 IE 登录时没有发送防伪 cookie。

【问题讨论】:

  • 谢谢,但您应该添加为答案并将其标记为已回答,这样人们就不会认为它仍然是一个悬而未决的问题。
  • 好点。将更新问题并添加答案。

标签: asp.net-mvc internet-explorer


【解决方案1】:

这确实很奇怪。我花了很多时间研究,但我终于弄清楚了问题所在。显然,IE 不接受来自包含下划线的 URL 的 cookie。就我而言,这是一个临时 URL,仅用于开发和测试。

我不确定这种行为的原因是什么,但是在更改 URL 后,一切都按预期工作。

我想我在这里分享我的发现。希望这可以为某人节省几个小时的生命:)

【讨论】:

    【解决方案2】:

    在我的例子中,在 UI 表单验证之后,如果请求是由 IE 发送的,我的控制器将无法验证防伪令牌。

    失败代码示例:

    <input type="submit" value="Submit" onclick="return validate();" />
    

    我的 validate() 函数将根据验证条件返回真/假。因此,如果条件为真,则必须提交表单。除了 IE,它在任何地方都可以使用。

    由于某种原因,输入验证后提交表单之前的一点延迟解决了问题。

    我将按钮更改为

    <button onclick="submit();">
     Submit
    </button>
    

    我的 submit() 函数:

    var submit = function(){
      if($("#form").validate()){
        setTimeout(function(){
          $("#form").submit();
        }, 0);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多