我正在处理需要举行各种会话数据的事情。
我需要能够从会话中删除某些数据,但不清楚整个事情。
显然,我可以使用
手动删除会话项目Session.Remove("itemName")
我的问题是,是否可以为所有会话变量设置前缀,然后删除具有该前缀的所有变量?
useData = session("snippet_theData")
然后做了
的事情Session.Remove("snippet_*")
...而不是必须单独手动删除每个项目。
答案 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()