1

我在虚拟服务器上共享了两个 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。

这是迄今为止我遇到的最独特的错误。如果您有任何建议,或者我是否可以为您提供任何进一步的细节,请告诉我。

谢谢你的帮助。

4

1 回答 1

0

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

于 2013-06-15T03:27:37.023 回答