我在将应用程序部署到QA环境时遇到了此问题。我们有一个带有表单验证的ASP.NET 4应用程序。在我们的应用程序中,我们有2个cookie:认证票据1个,其他信息另一个。 问题是:每次我使用Firefox登录到系统时,我都会跳回到登录页面。 当我使用Fiddle来调查问题时,我发现由于某些原因,Firefox不会“接受”我们的cookies:第一次请求登录页面时,我们的服务器返回头文件中的cookies正好:Firefox不接受ASP.NET身份验证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个饼干的痕迹。 另一个有趣的问题是,这个问题只发生在QA环境中(它具有LAN IP 10.16.x.x.我尝试使用问题仍然存在的计算机名称)。当我在使用本地主机的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)
如果将cookie设置为HttpOnly,它有帮助吗? http://msdn.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx –