2011-10-25 8 views
2

그래서 저는 다양한 세션 데이터를 보유해야하는 작업을하고 있습니다.선택한 세션 항목 제거 (VB ASP.NET)

세션에서 특정 데이터를 삭제할 수 있어야하지만 모든 것을 삭제할 수 있어야합니다.

분명히, 나는 수동으로 세션 항목을 삭제할 수 있습니다

Session.Remove("itemName") 

내 질문은, 사람이 뭔가를 할 수있는 경우 모든 세션 변수에 접두사를 설정처럼 알고 그 모든 변수이 삭제됩니다 접두사. 수동으로 각 항목을 제거하는 것보다

Session.Remove("snippet_*") 

을 대신 수행하고 당신이 뭔가를 잊은 적이 없다 ... 희망

useData = session("snippet_theData") 

하고 뭔가 당신이 무슨 뜻인지 볼 경우 ...!

답변

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 

일을 할 것으로 보인다.

6

가장 직접적인 방법은 세션 컬렉션을 반복하고 간단한 문자열 매치 (string.StartsWith) 또는 정규 표현식 (사용자의 ID를 정말 간단 snippet_로이다 과잉 경우)을 사용하고 중 하나를 제거하는 Session.Remove()를 사용하는 것 항목을 만들거나 값을 null 또는 빈 문자열로 설정하십시오. 이 같은

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

한 가지를 사용 LINQ는 당신이 원하는 (당신은 내가 주로 C#에서 코드로 내 vb.net을 용서해야합니다) 모든 열쇠를 얻을 수 있습니다 :

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()이 필요합니다.

1

뭔가 : 당신이 할 수