删除所选会话项(VB ASP.NET)

时间:2011-10-25 15:46:02

标签: asp.net vb.net session

我正在处理需要举行各种会话数据的事情。

我需要能够从会话中删除某些数据,但不清楚整个事情。

显然,我可以使用

手动删除会话项目
Session.Remove("itemName")

我的问题是,是否可以为所有会话变量设置前缀,然后删除具有该前缀的所有变量?

useData = session("snippet_theData")

然后做了

的事情
Session.Remove("snippet_*")

...而不是必须单独手动删除每个项目。

4 个答案:

答案 0 :(得分:7)

最直接的方法是遍历会话集合并使用简单的字符串匹配(string.StartsWith)或正则表达式(如果您的ID真的像snippet_那么简单就过度杀戮),并使用Session.Remove()删除该项,或将其值设置为null或空字符串。

答案 1 :(得分: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

似乎可以胜任。

答案 2 :(得分: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(),因为在迭代期间无法将其从Session中删除(延迟执行)。

答案 3 :(得分:0)

你可以做的一件事就是使用linq获取你想要的所有密钥(你必须原谅我的vb.net,因为我主要使用c#编写代码):

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