3

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

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

Session.Clear();

或者:

Session.Abandon();

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

4

3 回答 3

3

您无法清除所有会话,而是尝试回收 app_pool,这将自动清除会话。看这里-->

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

于 2013-10-31T10:23:49.823 回答
0

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

Session.Remove(Session.SessionID);

您也可以将会话值更新为空:(这就是我正在做的)

Session.Add(sessionKey, null);
于 2013-10-31T10:16:46.787 回答
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
于 2021-04-01T10:25:08.483 回答