c# – ASP.NET MVC 3网站防伪标记仅在IE上失败

c# – ASP.NET MVC 3网站防伪标记仅在IE上失败,第1张

概述在我的MVC 3项目中,我有一个登录页面,它使用MVC 3中内置的防伪逻辑. 在Firefox& Opera它运行得很好,但在IE上我得到了这个: A required anti-forgery token was not supplied or was invalid. 我真的难以理解为什么只有IE遭受这种情况,我检查了cookie设置,它们设置与其他浏览器相同,所以我在这里迷路了. 当我使用反 在我的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  ID="block-login">    <h2>        Login Form</h2>    <div >              @HTML.ValIDationSummary(true)        <div >            <div >                <label >                    @HTML.LabelFor(m => m.Username)</label>            </div>            <div >                @HTML.TextBoxFor(m => m.Username,new { @class = "text_fIEld" })                @HTML.ValIDationMessageFor(m => m.Username)            </div>        </div>        <div >            <div >                <label >                    @HTML.LabelFor(m => m.Password)</label>            </div>            <div >                @HTML.PasswordFor(m => m.Password,new { @class = "text_fIEld" })                @HTML.ValIDationMessageFor(m => m.Password)            </div>        </div>        <div >            <div >                <label >                    @HTML.LabelFor(m => m.RememberMe)</label>            </div>            <div >                @HTML.CheckBoxFor(m => m.RememberMe)            </div>        </div>        <div >            <div >                <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令牌创建程序时,我遇到了类似的问题.我没有使用MVC3,但它可能是一个similer问题.

对我来说问题是我在本地用于测试网站的域名中有一个下划线.理论上,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网站防伪标记仅在IE上失败全部内容,希望文章能够帮你解决c# – ASP.NET MVC 3网站防伪标记仅在IE上失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1246615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存