Internet Explorer中缺少Anti Forgery cookie

时间:2016-09-06 13:23:05

标签: asp.net-mvc internet-explorer

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

我有一个包含@ Html.AntiForgeryToken()的登录表单 我有一个控制器,其中包含使用ValidateAntiForgeryToken

修饰的登录后期操作

一切都按预期工作,除非我在IE中运行网站(在我的情况下为v.11)

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

2 个答案:

答案 0 :(得分:2)

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

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

我以为我在这里分享我的发现。希望这可以挽救他们几个小时的生命:)

答案 1 :(得分:0)

就我而言,在 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);
  }
}