2012-06-06 132 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)