Удаление выбранных элементов сеанса (VB ASP.NET) - PullRequest
3 голосов
/ 25 октября 2011

Я работаю над чем-то, что требует хранения различных данных сеанса.

Мне нужно иметь возможность удалить некоторые данные из сеанса, но не все очистить.

Очевидно,Я могу вручную удалить элементы сеанса с помощью

Session.Remove("itemName")

Мой вопрос: возможно ли сделать что-то вроде установки префикса для всех переменных сеанса, а затем удалить все переменные с этим префиксом?

useData = session("snippet_theData")

, а затем то, что делает

Session.Remove("snippet_*")

... вместо того, чтобы вручную удалять каждый элемент по отдельности.

Ответы [ 4 ]

7 голосов
/ 25 октября 2011

Самый прямой способ - перебрать коллекцию сеансов и использовать либо простое совпадение строк (string.StartsWith), либо регулярное выражение (перебор, если ваши идентификаторы действительно такие же простые, как snippet_), и либо использовать Session.Remove() чтобы удалить элемент или установить его значение на ноль или пустую строку.

2 голосов
/ 26 октября 2011

Спасибо всем ... Боюсь, что вышеприведенное не совсем сработало, я использую 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

Кажется, чтобы сделать работу.

1 голос
/ 25 октября 2011

Примерно так:

 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() необходим, потому что вы не можете удалить его из сеанса во время итерации (отложенное выполнение).

0 голосов
/ 25 октября 2011

Одна вещь, которую вы можете сделать, это использовать linq, чтобы получить все ключи, которые вы хотите (вы должны извинить мой vb.net, так как я в основном пишу код на c #):

Dim myKeys = Session.Keys.Cast(Of String).Where(Function(k) k.StartsWith("snippet")).ToArray()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...