2011-10-25 39 views
2

所以,我正在處理需要各種會話數據的東西。刪除選定的會話項目(VB ASP.NET)

我需要能夠從會話中刪除某些數據,但不能清除整個事情。

很顯然,我可以手動刪除與會話項目

Session.Remove("itemName") 

我的問題是,沒有人知道是否有可能做一些事情,比如設置一個前綴,所有會話變量,然後刪除與所有的變量字首。

useData = session("snippet_theData") 

,然後東西做

Session.Remove("snippet_*") 

而不是必須手動刪除每一個項目,希望你沒有忘記的東西......如果你明白我的意思?!

回答

2

謝謝大家......我怕上面也不太工作,我使用VB和我得到的錯誤,它看起來對我來說,上述方法將在C#中工作,但失敗了VB。

反正你我指出了正確的方向,我現在有這樣的:

Dim Key As String 
    Dim prefix As String = "prefix_" 
    Dim deleteKeyArray As Array 
    Dim i As Integer 
    Dim deleteKeys As String 

    For Each Key In Session.Keys 
     If Key.StartsWith(prefix) Then _ 
      deleteKeys = Key & "," & deleteKeys 
    Next 

    deleteKeyArray = Split(deleteKeys, ",") 
    For i = 0 To UBound(deleteKeyArray) 
     Session.Remove(deleteKeyArray(i)) 
    Next 

似乎做的工作。

6

最直接的方式是通過會話集合遍歷和使用一個簡單的字符串匹配(string.StartsWith)或正則表達式(矯枉過正,如果你的ID是真的這麼簡單snippet_),要麼使用Session.Remove()刪除項目,或將其值設置爲null或空字符串。

0

有一兩件事你可以做的是使用LINQ得到所有你想要的(你要原諒我的vb.net就像我在C#代碼大多)鍵:

Dim myKeys = Session.Keys.Cast(Of String).Where(Function(k) k.StartsWith("snippet")).ToArray() 
1

事情是這樣的:

Const prefix = "snippet_" 
Dim prefixKeys = (From sessionKey In Session.Keys 
        Let name = CStr(sessionKey) 
        Where name.StartsWith(prefix)).ToList 
If prefixKeys.Any Then 
    For Each key In prefixKeys 
     Session.Remove(key.name) 
    Next 
End If 

注:因爲你不能從會議迭代過程中,否則將其刪除(延遲執行)的ToList()是必要的。