基于Asp.NET Forms的Autheticaiton在IE9或10中不起作用

时间:2013-06-15 02:13:12

标签: c# iis forms-authentication asp.net-4.0

我在虚拟服务器上共享了两个asp.net Web表单应用程序。一切都很好。我不得不在不同的供应商处转移到具有相同规格的新虚拟服务器。

第一个Web表单应用程序运行良好。

问题是,第二个Web表单应用程序不允许用户进行身份验证。我正在使用基于asp.net表单的身份验证。由于某种原因,它不发布表单身份验证票证。我在我的开发环境中重新编写了该项目,并且身份验证效果很好。

我不确定IIS是否配置不正确或是否有其他设置不正确。我使用旧服务器检查新服务器并且所有IIS设置看起来都是相同的。我正在使用asp.net 4.0并使用IIS主机标头来区分两个站点之间的请求。

经过几个小时的测试和研究后,我得出的结论是,生产服务器上的第二个网站无法验证Internet Explorer 9和用户中的用户。 10.每个其他浏览器都可正常工作在IE9或10中以兼容模式运行网站时,它也有效。

以下是我在代码中发布表单身份验证故障单的方法:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                1, //Ticket Version
                "", //Associated User Name
                DateTime.Now, //Date/Time Issued
                DateTime.Now.AddMinutes(60), //Time to expire
                false, //Persistent Cookie
                user_id, //User-Data --- User Role
                FormsAuthentication.FormsCookiePath); // Cookie Path

        string hash = FormsAuthentication.Encrypt(ticket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

        if (ticket.IsPersistent)
        {
            cookie.Expires = ticket.Expiration;
        }


    //Add cookie to the list
    Response.Cookies.Add(cookie);

以下是我在Web.Config文件中的身份验证设置:

<authentication mode="Forms">
  <forms loginUrl="Login.aspx" protection="All" timeout="90" path="/" name=".survey" requireSSL="false" slidingExpiration="true" defaultUrl="survey.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
</authentication>
<authorization>
  <deny users="?"/>
  <allow roles="Standard, Admin"/>
</authorization>

这是另一件事。第一个Web表单应用程序(工作的应用程序)使用相同的基本身份验证代码。它适用于所有浏览器。两个应用程序的身份验证之间的唯一区别是第一个应用程序(有效的应用程序)需要SSL。

这是迄今为止我遇到的最独特的错误。如果您有任何建议或我可以向您提供任何进一步的详细信息,请通知我。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

确保您在服务器上拥有.Net的最新补丁。在关于IE的版本之前我遇到过这个问题,但是一旦我应用了补丁,它就开始工作了。