2011-10-01 22 views
0

我使用Asp.Net成員和在用戶進入正確的用戶名和密碼,我簽下他使用:面對會話問題

FormsAuthentication.SetAuthCookie(String, Boolean) 

如果我創建一個永久性的Cookie,然後我覺得我的會員資格仍然會能夠工作,但我的會話數據將爲空。

這真是annonying和我的應用程序中引入了大量的錯誤。我該如何處理?

我應該處理global.asax的Application_AuthenticateRequest並檢查我存儲在session中的userId是否爲空,並且Membership.GetUser()不爲空,那麼我應該在Session中再次存儲ProviderUserKey(Guid)。

這是一個合理的方法,或者有沒有更好的方法來處理?

回答

2

您必須在您的web.config文件中配置您的會話和authcookie的生存期。請參閱:

<forms timeout="5" /> 

<sessionState timeout="5" /> 

形式用於身份驗證,當它超時將註銷 用戶。如果需要,您可以通過將SlidingExpiration屬性 設置爲'true'來'阻止'超時,並且它將更新用戶活動上的表單傳票(請求讀取 請求)。這會保持用戶登錄,而他的網站上 處於「有效」狀態。

當會話超時,你將失去在Session對象中的數據。

您的問題可能是此問題。您的auth-cookie仍然存在,但會話超時。用戶已登錄,但會話變量已銷燬!在您的應用程序中檢查此配置。


See this Q also

+0

我不想將窗體和sessionState超時設置爲相同。如果它們不同,會怎麼樣?我怎樣才能再次在會話中設置數據?什麼是最好的方式來做到這一點? – TCM

+0

如果會話超時,則必須再次填充它的數據。或者您可以將光數據放入Cookie中而不是會話中。例如,我通常會將名字,姓氏,電子郵件等存儲在cookies中。您也可以將大量數據放入Cookie中,但不推薦,也不建議在會話中放置重物。所以1-如果你有光照數據,把它們放在cookie中(而不是會話)2-如果你有大的和重的物體,最好從數據庫中選擇它們,當你需要它們時。 –

0

我認爲,您需要使用session而不是cookie。 並根據我認爲應該不是更好的保存ProviderUserKey在會議或任何地方。 使用global.asax(Application_AuthenticateRequest)進行檢查身份驗證,並根據該ID從數據庫獲取ProviderUserKey。

希望我的評論對你有用。

1

會話和authcookies是不同的。可以在forms timeout="5" config-section中設置authcookies的生命週期,並且應該在sessionState timeout="5" config-section中設置會話生命週期。 auth-cookie可能會持續存在,但會話過期。檢查這個。

+0

你的 「檢查這個」 末意味着什麼?我明白auth cookie是堅持不懈的。那麼我怎樣才能在會話中再次設置數據呢?什麼是最好的方式來做到這一點? – TCM