2012-06-06 107 views
2

我在将应用程序部署到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) 
+0

如果将cookie设置为HttpOnly,它有帮助吗? http://msdn.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx –

回答

0

这听起来很明显,但在Firefox中检查Cookie设置。如果您进入隐私状态并选择使用自定义历史记录,则可以指定不接受来自第三方或仅来自特定网站的Cookie。

我和你一模一样,没有问题。

Dim authTicket As New FormsAuthenticationTicket(1, userIdentity, Date.Now, _  
    Date.Now.AddMinutes(15), False, userData) 
Dim encTicket As String = FormsAuthentication.Encrypt(authTicket) 
Dim faCookie As New HttpCookie(FormsAuthentication.FormsCookieName, encTicket) 
Response.Cookies.Add(faCookie)