【问题标题】:Removing Selected Session items (VB ASP.NET)删除选定的会话项 (VB ASP.NET)
【发布时间】:2011-10-25 15:46:01
【问题描述】:
我正在做一些需要举行各种会话数据的事情。
我需要能够从会话中删除某些数据,但不能完全清除。
显然,我可以手动删除会话项
Session.Remove("itemName")
我的问题是,是否可以为所有会话变量设置前缀,然后删除所有具有该前缀的变量?
useData = session("snippet_theData")
然后是一些事情
Session.Remove("snippet_*")
...而不必手动单独删除每个项目。
【问题讨论】:
标签:
asp.net
vb.net
session
【解决方案1】:
最直接的方法是遍历会话集合并使用简单的字符串匹配 (string.StartsWith) 或正则表达式(如果您的 ID 真的像 snippet_ 一样简单,那就太夸张了),或者使用 @ 987654323@ 删除该项目,或将其值设置为 null 或空字符串。
【解决方案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
似乎完成了这项工作。
【解决方案3】:
类似这样的:
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 中删除,否则(延迟执行)。
【解决方案4】:
您可以做的一件事是使用 linq 获取您想要的所有密钥(您必须原谅我的 vb.net,因为我主要使用 c# 编写代码):
Dim myKeys = Session.Keys.Cast(Of String).Where(Function(k) k.StartsWith("snippet")).ToArray()