2010-08-16 65 views
6

人們報告無法登錄到我們的某個ASP.NET網站。當我檢查IIS日誌時,看起來FormsAuthentication cookie在他們登錄後沒有被瀏覽器緩存。除Cookie被關閉外,什麼會導致ASP.NET FormsAuthentication Cookie問題?

我不認爲它的那樣簡單「用戶設置自己的瀏覽器不接受cookies」,因爲:
a)如果在一般的餅乾並沒有爲他們的瀏覽器,他們從來沒有已經獲得儘可能就像他們在這個過程中所做的那樣 - 例如,ASP.NET會話cookie似乎工作正常。
b)這些通常不是那種甚至不知道如何關閉cookies的用戶。

所以我認爲這一定是別的。除了用戶只需設置其瀏覽器拒絕Cookie,什麼樣的問題可能導致ASP.NET FormsAuthentication Cookie停止工作,

編輯:例如This answer to another question表明有時FormsAuthentication Cookie會因爲它們太大而被丟棄 - 也許有人可以對此有所瞭解?

編輯:我們網站之一的FormsAuthentication cookie爲233字節 - 有點大嗎?它可以做得更小?也許這會有所幫助。

編輯:我注意到代碼使用FormsAuthentication.SetAuthCookie()Response.Redirect()而不是FormsAuthentication.RedirectFromLoginPage() - 可能是相關的嗎?

回答

2

用戶是否可以通過2個不同的域訪問您的網絡服務器?例如,如果我訪問www.foo.com並獲取身份驗證cookie,然後重定向到www.bar.com,發送到www.bar.com的請求肯定不會包含www.foo.com設置的cookie 。

如果您將cookie設置爲htp://login.foo.com,然後重定向到htp://content.foo.com,也會發生此問題。不過,我相信cookie可以使用通配符進行配置,以便它適用於* .foo.com。

編輯:故意拼錯「http」,以便在此答案中沒有實際可點擊的垃圾鏈接。 :)

+0

謝謝。這確實可能會導致形式認證問題,但它不是我的問題的原因。 – codeulike 2010-08-18 15:30:28

+0

老鼠 - 很簡單的答案,呃?如果你確實找到了根本原因,請把它作爲答案在這裏發佈 - 現在我很好奇。 – mikemanne 2010-08-19 14:00:08

1

有一個空閒超時 - 他們登錄,然後暫時不做任何事情,然後嘗試再次訪問該網站?你可以檢查一下。然後,查看超時是否設置爲滑動超時(例如,上次請求後20分鐘)或固定超時(例如,登錄後20分鐘)。我認爲滑動超時不是默認設置。

+0

謝謝。這確實可能會導致形式認證問題,但它不是我的問題的原因。 – codeulike 2010-08-18 15:30:59

2

如果您的站點在Web場中運行,則可能需要在所有服務器上設置相同的machine keys,或者如果用戶切換服務器,則可能無法解密身份驗證票證。

RedirectFromLoginPage()SetAuthCookie其次Response.Redirect()之間的區別在於,第一部作品也如果禁用cookie(實際上它使用的查詢字符串參數跟蹤驗證的用戶)。

2

難道是Web服務器的名稱,或DNS名稱的一部分包含一個下劃線?

如:

www2_http.mydomain.com

我記得在一定的發展階段,其中,會議將不經常表現得有這個問題。從機器域名刪除下劃線解決了我的問題。

問候

4

我也曾有過類似的問題(不與formsauthentication餅乾,但帶有粘性的負載均衡器的cookie),因爲服務器沒有一個適當的時間/時區的配置,所以存在這樣的情況,當cookie過期日期早於用戶機器中的當前時間。

在這裏看到:How do expire values work for cookies and caching?

希望它是否使用一個以上的域交談相同的Web應用程序可以幫助

+0

這裏的問題與此相同,只是客戶機時區設置不正確。你如何解決這個問題? - cookie第二天到期? – 2013-04-10 11:11:57

2

?請記住,Cookie是域名特定的,www.mydomain.com <> www.mydomain.net <> my.domain.net。

在黑暗中刺你的機器鑰匙在你的web.configs中嗎?