我在將應用程序部署到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 –