2011-10-25 20 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()を使用することですitemの値をnullまたは空の文字列に設定します。

0

あなたができることの一つは、(あなたがC#で、私はほとんどのコードとして私vb.netを言い訳する必要があります)あなたが望むすべてのキーを取得するために使用LINQです:このような

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()が必要とされているそれ以外の場合は(遅延実行)。

関連する問題