将我们的应用程序部署到 QA 环境时,我遇到了 Firefox 浏览器的这个问题。我们有一个带有表单身份验证的 ASP.NET 4 应用程序。在我们的应用程序中,我们有 2 个 cookie:1 个用于身份验证票证,另一个用于其他信息。问题是:每次我使用 Firefox 登录系统时,我都会跳回登录页面。当我使用 Fiddle 调查该问题时,我发现由于某种原因 Firefox 不“接受”我们的 cookie:对登录页面的第一个请求,我们的服务器在标题中返回 cookie 就好了:
Set-Cookie: .ASPXAUTH_Imp=...; expires=Thu, 07-Jun-2012 06:37:24 GMT; path=/
Set-Cookie: .ASPXAUTH=...; expires=Wed, 06-Jun-2012 09:57:24 GMT; path=/
但是,在下一个响应中,我们的 cookie 不会出现在请求标头中。此问题不会在任何其他浏览器(IE、Chrome 等)中发生。在其他浏览器中,cookie 被接受并在下一个请求中传递。
当我查看存储在 Firefox 中的 cookie 时,我可以看到我的网站,但它只有 ASP.NET_sessionID cookie。没有其他 2 个 cookie 的踪迹。更有趣的一点是,此问题仅发生在 QA 环境中(LAN IP 为 10.16.xx,我尝试使用问题仍然存在的机器名称)。当我使用 localhost 在 Visual Studio 中进行调试时,它工作得非常好。这是我向客户端发送 Cookie 的代码:
' ASP.NET authentication cookie '
Dim cookieExpiration As DateTime = DateTime.Now.AddMinutes(Constants.WebSettingsConst.TimeOut)
Dim authenticationTicket = New FormsAuthenticationTicket(2, CurrentContext.UserContextID(), DateTime.Now, cookieExpiration, True, String.Empty, FormsAuthentication.FormsCookiePath)
Dim encryptedTicket As String = FormsAuthentication.Encrypt(authenticationTicket)
Dim authCookie = New HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
authCookie.Expires = authenticationTicket.Expiration
authCookie.Path = FormsAuthentication.FormsCookiePath
'HttpContext.Current.Response.Cookies.Remove(FormsAuthentication.FormsCookieName)'
HttpContext.Current.Response.Cookies.Add(authCookie)