#asp.net #vb.net #session
#asp.net #vb.net #сеанс
Вопрос:
Я работаю над чем-то, что требует хранения различных данных сеанса.
Мне нужно иметь возможность удалять определенные данные из сеанса, но не очищать все это.
Очевидно, что я могу вручную удалять элементы сеанса с помощью
Session.Remove("itemName")
Мой вопрос в том, можно ли сделать что-то вроде установки префикса для всех переменных сеанса, а затем удалить все переменные с этим префиксом?
useData = session("snippet_theData")
и затем что-то, что делает
Session.Remove("snippet_*")
… вместо того, чтобы вручную удалять каждый элемент по отдельности.
Ответ №1:
Наиболее прямым способом было бы выполнить итерацию по коллекции сеансов и использовать либо простое сопоставление строк ( string.StartsWith
), либо регулярное выражение (перебор, если ваши идентификаторы действительно такие простые, как snippet_
), и либо использовать Session.Remove()
для удаления элемента, либо установить его значение равным 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 amp; "," amp; 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()
необходим, потому что вы не можете удалить его из сеанса во время итерации в противном случае (отложенное выполнение).
Ответ №4:
Одна вещь, которую вы могли бы сделать, это использовать linq для получения всех ключей, которые вы хотите (вам придется извинить мое vb.net поскольку я в основном пишу на c #):
Dim myKeys = Session.Keys.Cast(Of String).Where(Function(k) k.StartsWith("snippet")).ToArray()