2013-11-25 43 views
0

我有清除所有會話變量在這樣的Page_Load方法ASP.NET默認頁面:在ASP.NET中刪除會話變量年長15分鐘內

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Session.RemoveAll(); 
    } 
} 

,但我想刪除會話變量只有年長在page_load方法中超過十五分鐘。

我該如何刪除舊的會話變量?

+0

恕我直言會話默認情況下,15分鐘後復位。 –

+0

@RoyiNamir在ASP.NET中默認爲[20分鐘](http://msdn.microsoft.com/zh-cn/library/system.web.sessionstate.httpsessionstate.timeout(v = vs.110).aspx) 。 – James

+0

這些是空閒超時值;我認爲OP想要在超時結束時刪除未使用的變量 – NoviceProgrammer

回答

0

除非您有充分的理由手動執行(您似乎沒有),否則應該將會話過期保留給框架。您可以相應地調整SessionState.Timeout屬性,以便您的會話在15分鐘後過期(默認值爲20分鐘),例如

<configuration> 
    <system.web> 
     <sessionState timeout="15" /> 
    </system.web> 
</configuration> 
+0

,會清除所有會話變量還是隻比15分鐘早? – verdery

+0

@James,我相信他只想在15分鐘後清除「一些」會話變量。 –

+0

@verdery這會使整個會話過期,所以所有的變量。你是否正在尋找X特定的變量在X時間後被清除,但保持會話活着? 'RemoveAll'相當於調用'Clear',這個功能和會話過期一樣有效...... – James

1

我所做的是創建自定義對象,存儲我想要保留的實際數據以及時間戳。這樣,您就不會改變默認的會話行爲,並且可以讓不同的對象以不同的時間間隔到期。

然後,當我執行某些操作時,查看此對象,測量其當前時間的時間戳,並在符合我的時間差的情況下清除該對象。

Class mycustomobject 
Property thisObject as object '<- store your object you want to keep here, 
           'even define as type of your specific object... 

Property timestamp as datetime 
End class 

Dim MySessionSaveObject as new mycustomobject 

with MySessionSaveObject 
.object = 'Whatever you want to save... 
.timestamp = now 
end with 


session(mySessionVar) = MySessionSaveObject 

我想你可以確定其餘的嗎?

0

你可以做些什麼讓個別項目自動失效是(錯誤)使用內置的超時時間緩存。使用您固定的「會話」密鑰加上當前SessionId的緩存鍵。然後,您還可以指定20分鐘的滑動超時。

所以不是

Session["MyKey"] = value; 

您使用

Cache.Insert("MyKey" + Session.SessionID, value, null, 
    TimeSpan.FromMinutes(20), Cache.NoAbsoluteExpiration); 
+0

這很酷!必須在某個時候嘗試。 –