gpt4 book ai didi

c# - ASP.NET MVC 3 网站防伪 token 仅在 IE 上失败

转载 作者:太空狗 更新时间:2023-10-29 21:35:45 26 4
gpt4 key购买 nike

在我的 MVC 3 项目中,我有一个使用 MVC 3 内置的防伪逻辑的登录页面。

在 Firefox 和 Opera 上它工作得很好,但在 IE 上我得到这个:

A required anti-forgery token was not supplied or was invalid.

我真的很困惑为什么只有 IE 会遇到这个问题,我检查了 cookie 设置,它们的设置与其他浏览器相同,所以我在这里迷路了。

当我使用防伪代码时,我同时使用了 SALT 和域检查(这不重要但值得一提)。

查看代码如下:

@model login.Models.LogOnModel

@{
ViewBag.Title = "Log On";
}

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<script type="text/javascript">
$(function () {
//focus on form.
$("#UserName").focus();
});
</script>

@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { @class = "form login" })) {
@Html.AntiForgeryToken("!@#Hq4(", ViewBag.AppDomain, "/")
<div id="box">
<h1>Login</h1>
Please enter your username and password. @Html.ActionLink("Register", "Register") if you don't have an account.
<div class="block" id="block-login">
<h2>
Login Form</h2>
<div class="content login">
@Html.ValidationSummary(true)
<div class="group buffer">
<div class="left">
<label class="label right">
@Html.LabelFor(m => m.UserName)</label>
</div>
<div class="right">
@Html.TextBoxFor(m => m.UserName, new { @class = "text_field" })
@Html.ValidationMessageFor(m => m.UserName)
</div>
</div>
<div class="group buffer">
<div class="left">
<label class="label right">
@Html.LabelFor(m => m.Password)</label>
</div>
<div class="right">
@Html.PasswordFor(m => m.Password, new { @class = "text_field" })
@Html.ValidationMessageFor(m => m.Password)
</div>
</div>
<div class="group buffer">
<div class="left">
<label class="label right">
@Html.LabelFor(m => m.RememberMe)</label>
</div>
<div class="right">
@Html.CheckBoxFor(m => m.RememberMe)
</div>
</div>
<div class="group navform buffer">
<div class="right">
<button class="button" type="submit">
<img src="@Url.Content("~/Content/images/icons/key.png")" alt="Save" />
Login
</button>
</div>
</div>
</div>
</div>
</div>
}

ViewBag.AppDomain 是来自 web.config 的值,用于在测试和生产使用期间轻松设置。

如果我从防伪标记中删除域和路径部分,它就可以正常工作。所以这两个中的一个一定是问题所在。

最佳答案

在使用自定义 AntiCSRF token 创建器时,我遇到了类似的问题。我没有使用 MVC3,但这可能是一个类似的问题。

对我来说,问题是我在本地用于测试站点的域名中有一个下划线。理论上 DNS 名称不能有下划线(即使“计算机名称”可以),所以 IE 不会保存 cookie。

这可能不是同一个问题,但可能与测试环境和 IE 处理 cookie 的方式有关。

这是一篇非常有趣的文章,介绍了 IE cookie 处理的内部机制,可能会帮助您发现问题。

http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx

关于c# - ASP.NET MVC 3 网站防伪 token 仅在 IE 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8604336/

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