2008-11-21 72 views
4

我遇到了一個ASP.NET應用程序的問題,這個問題讓我發瘋。表單身份驗證應該不會超時?

當用戶離開頁面處於非活動狀態一段時間時,會話超時並且由於會話變量無法解析而引發錯誤(我將錯誤地陷入這個問題,但這不是問題)。 我編寫了一個'defribulator',它會在會話超時一半到期後執行一個不可見的回發,並且這似乎工作正常 - 即使會話超時設置爲20分鐘,應用程序仍然保持30分鐘不會導致錯誤。 但是,今天早上其他開發者中有一個經歷了暫停 - 這怎麼可能?

在進一步的調查中,我認爲當表單身份驗證超時被超過時會出現問題 - 即使defribulator已經(顯然)讓會話保持活動狀態。我已經讀過,如果在指定的超時時間的一半已經恢復後發生回發,認證票證纔會被重新發布,並且這不會成爲問題,因爲defrib會在超時時間的後半部分發出請求 - 所以爲什麼它沒有重新發布?

我想我可以通過將身份驗證超時設置爲8小時左右來解決問題,但這是一個不好的解決方法。

任何人都可以對此有所瞭解嗎?

預先感謝

[編輯24/11/2008]回顧日誌文件已被證明有啓發和混亂。我可以看到defribulator在非活動狀態10分鐘後觸發,但Session_Id在整個過程中似乎始終保持一致,表單身份驗證票證ID發生變化 - 不確定是否應該這樣做。我正在制定一個測試計劃,並會在我完成測試計劃後發回。 感謝所有提供反饋的人。

[編輯24/11/2008]好吧,我很難過 - 現在似乎工作正常!當運行defrib(ID更改)並且會話正在維護時,正在重新生成身份驗證票證。這是一個服務器問題 - 無法分辨。我以前遇到過這個問題,從來沒有深究過它的底部,這是非常令人沮喪的 - 肯定不應該這麼難。我將不得不讓這個時間下降,因爲我必須跟上應用程序的其他方面。我只需要針對這個問題編寫代碼 - 這在客戶網站上可能不會發生。

再次感謝每個人的輸入 - 如果我取得任何進展,我會在這裏發佈。

+0

我也看到了這個問題。讓我們希望有人有一個很好的解釋 – 2008-11-21 14:22:48

+0

您是否手動生成身份驗證憑證 – 2008-11-21 19:14:11

+0

我正在重複使用來自內部庫的代碼,因此我必須在星期一進行檢查。我會讓你知道(感謝你的輸入) – DilbertDave 2008-11-21 19:17:12

回答

6

iis回收或終止應用程序池時也可能發生這種情況。

您可能想檢查Troubleshoot Forms Authentication可能是客戶端丟失了他們的cookie。

如果手動生成身份驗證票證,你需要在代碼中設置超時,而不是在web.config

1

不意味着不言自明,但:

  1. 是會議和FormsAuthentication超時設置爲相同的值?
  2. slidingExpiration設置爲true
0

感謝您的回覆傢伙: 我已經明確地在web.config中設置了slidingExpiration爲true,但沒有任何效果。

超時值是: 會話:20分鐘 FormsAuthentication:60分鐘

我已離開會話超時原樣和FormsAuthentication減少到12分鐘的測試。每10分鐘就有一次「ping」。如果我將頁面保持非活動狀態14分鐘,然後單擊一個按鈕,則會出現#edit問題:但不是每次都看起來像!#。

1

您是否針對導致問題的應用程序池或工作進程回收進行檢查?