我在虚拟服务器上共享了两个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。
这是迄今为止我遇到的最独特的错误。如果您有任何建议或我可以向您提供任何进一步的详细信息,请通知我。
感谢您的帮助。
答案 0 :(得分:0)
确保您在服务器上拥有.Net的最新补丁。在关于IE的版本之前我遇到过这个问题,但是一旦我应用了补丁,它就开始工作了。