2011-09-27 111 views
0

我的會話每20分鐘更新一次。我已將超時設置爲300分鐘,但仍可能因爲應用程序池回收而更新。問題:控制會話超時

我正在存儲UserId這是在會話中返回null的Guid。問題是,當我使用

Membership.GetUser().ProviderUserKey 

它工作正常使用會員。但顯然它會進行數據庫調用。我怎樣才能防止這個問題發生?爲什麼Membership.GetUser()。ProviderUserKey成功,而Session不?

+0

請發佈您的web.config;並看看我的回答 –

回答

0

您正在混合身份驗證和會話。這是兩個完全不同的概念。 GetUser()返回您的MemberShipProvider當前認證的用戶。

會話和身份驗證有不同的超時 - 因此它有效,您的會話超時但用戶仍然通過身份驗證。

1

您的會話可能仍然活着(如果將其設置爲300分鐘),但ASP.NET成員資格可能會過期?

你是否增加了認證超時?

<authentication mode="Forms"> 
    <forms loginUrl="Login/" timeout="180"/> 
</authentication> 
3

爲了完成簡的和Neil的回答,你應該看看你的web.config並設置都超時的sessionState認證

<sessionState timeout="300"/> 

的sessionState timeout指定會話在放棄之前可以閒置的分鐘數。默認值爲20。

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" timeout="300" /> 
</authentication> 

形式超時用於指定形式認證會話有限的壽命。默認值是30分鐘。如果發佈持久表單身份驗證Cookie,則還會使用timeout屬性來設置持久cookie的生存期。

+0

我不認爲這將解決問題。我有兩個超時爲2880這太大了!我使用FormsAuthentication.SetAuthCookie(userName,true)登錄用戶;還有其他事情要做嗎? – Jaggu