ASP.NET:如何从所有用户中删除所有会话变量?

时间:2013-10-31 10:10:00

标签: asp.net session

我们有ASP.NET应用程序,想要从所有用户的所有会话中删除所有会话变量吗?

我的意思是不要仅使用以下方法从当前会话中删除会话变量:

Session.Clear();

或:

Session.Abandon();

我们还需要从其他用户的会话中清除会话变量吗?

3 个答案:

答案 0 :(得分:3)

您无法清除所有会话,而是转发回收app_pool,这将自动清除会话。见这里 - >

https://stackoverflow.com/a/9470372/823161

答案 1 :(得分:0)

如果您要创建会话密钥,那么对于每个用户,方式可以是:

Session.Remove(Session.SessionID);

此外,您可以将会话值更新为null :(这就是我正在做的事情)

Session.Add(sessionKey, null);

答案 2 :(得分:0)

我在 VB.Net 中有一组代码来获取系统中的活动会话,您可以使用循环终止它。

'''' Getting All Session
            Dim obj As Object = GetType(HttpRuntime).GetProperty("CacheInternal", BindingFlags.NonPublic Or BindingFlags.[Static]).GetValue(Nothing, Nothing)
            Dim obj2 As Object() = DirectCast(obj.[GetType]().GetField("_caches", BindingFlags.NonPublic Or BindingFlags.Instance).GetValue(obj), Object())
            For i As Integer = 0 To obj2.Length - 1
                Dim c2 As Hashtable = DirectCast(obj2(i).[GetType]().GetField("_entries", BindingFlags.NonPublic Or BindingFlags.Instance).GetValue(obj2(i)), Hashtable)
                For Each entry As DictionaryEntry In c2
                    Dim o1 As Object = entry.Value.[GetType]().GetProperty("Value", BindingFlags.NonPublic Or BindingFlags.Instance).GetValue(entry.Value, Nothing)
                    If o1.[GetType]().ToString() = "System.Web.SessionState.InProcSessionState" Then
                        Dim sess As SessionStateItemCollection = DirectCast(o1.[GetType]().GetField("_sessionItems", BindingFlags.NonPublic Or BindingFlags.Instance).GetValue(o1), SessionStateItemCollection)
                        If sess IsNot Nothing Then
                            If sess("EmpCode") IsNot Nothing Then
                                Dt.Rows.Add(sess("EmpCode").ToString.Trim)
                            End If
                        End If
                    End If
                Next
            Next