2009-09-03 88 views
0

當用戶在我的asp.net網站(通過FormsAuthentication)登錄時,我在當前會話中存儲了一些關於它們的信息,例如他們的UserId,FirstName和其他非常基本的變量經常在各種網頁上。Asp.Net會話在FormsAuthentication之前超時

問題是,即使會話超時設置爲比FormsAuthentication超時更長,我注意到有時會重置當前會話(即session = null)。

1)我不明白爲什麼會發生。有任何想法嗎?

2)發生這種情況時,用戶仍然登錄(FormsAuthentication尚未超時),但其當前會話不再包含任何數據。我想要做的是噹噹前會話超時時,他們被要求再次登錄。爲此,我需要檢測會話超時,並在發生時將其註銷。如何才能做到這一點?

3)這似乎有點矯枉過正。我不能直接在FormsAuthentication中存儲會話中存儲的任何內容(UserId,FirstName等)嗎?如果是這樣,怎麼樣?通過這種方式,無論當前會話如何,我都可以訪問這些值(但在此情況下不再使用)。你看到這個邏輯有什麼問題嗎?如果沒有,那怎麼辦?

+0

Dupe? http://stackoverflow.com/questions/648992/session-timeout-in-asp-net – 2009-09-03 12:29:15

+0

杜佩? http://stackoverflow.com/questions/316172/session-timeout-asp-net – 2009-09-03 12:30:24

+0

你使用HttpContext.Current.User獲取信息?? – 2009-09-03 12:35:14

回答

0

我以爲UserID 實際上存儲在Membership系統中嗎?你不能從HttpContext.Current.User獲得足夠的信息嗎?

您可以使用配置文件屬性來存儲其他信息。有關更多信息,請參閱this page

1

我們面臨同樣的問題,原因是FormsAuthentication和Session是兩回事。 FormsAuth設置cookie和cookie隨每個請求一起傳輸,但如果IIS工作進程重新啓動或崩潰並恢復或IIS重新啓動,則會話可能會被破壞。您的FormsAuth Cookie仍然存在,但您的會話不會。這就是爲什麼OnAuthenticate你應該簡單地重新創建會話,如果會話值不存在。一個如果語句開銷在這裏是必要的。

檢查出FormsAuthenticationModule

如果會話值未初始化,這將允許您激活會話值,如果會話可能會被破壞,您應該在此代碼中檢查並初始化。

0

你已經將頭腦放到了一個共同的陷阱中,將基於asp.net提供者的功能與他們設計要取代的功能(會話)混合在一起。大聲笑。

使用配置文件提供程序來存儲關於用戶的偶發位數據。在配置中定義字段似乎有更多的工作要做,但它通過不在應用程序中散佈任意字符串鍵來減少代碼氣味。還有其他好處,但使用配置文件提供程序將正確解決您的問題。