2011-12-16 127 views
1

我目前使用ASP.Net狀態服務器來存儲會話數據在我的應用程序。ASP.Net狀態服務器和訪問HttpContext.Current.Session

作爲會話(不問)的更大問題的解決方法,我需要從會話中刪除一組包含特定字符串的密鑰,但我不知道確切的密鑰。

我想做類似下面的代碼。由於會話數據沒有進程,我擔心的是通過這樣做,我將整個會話數據加載到ASP.Net工作進程中。這是一個問題,因爲當前的應用程序會在會話中放置太多的數據(我們試圖解決的較長期問題)。

有誰知道會話如何在引擎蓋下被訪問?有沒有辦法迭代會話密鑰而不會將會話加載到內存中?

//does this line cause the session to be loaded back into the WP? 
var session = HttpContext.Current.Session; 

if (session != null) 
{ 
    //what about this line? 
    var keysToRemove = session.Keys.Cast<object>(). 
     Where(key => key.ToString().Contains(MYKEY)).ToList(); 
    foreach (var key in keysToRemove) 
    { 
     session.Remove(key.ToString()); 
    } 
} 

回答

1

根據用戶對內置提供者的請求,整個會話總是加載到內存中。它在執行達到正常頁面代碼之前加載(不像您所假設的那樣懶惰)。阻止加載的唯一方法是擁有偵聽早期事件之一併從請求中刪除會話ID的模塊。

注意:session.Keys已經是字符串的集合,因此您可以移除這樣複雜的投射。