我们有 ASP.NET 应用程序,想要从所有用户的所有会话中删除所有会话变量?
我的意思是不要仅使用以下方法从当前会话中删除会话变量:
Session.Clear();
或者:
Session.Abandon();
我们还需要从其他用户的会话中清除会话变量吗?
您无法清除所有会话,而是尝试回收 app_pool,这将自动清除会话。看这里-->
如果您正在创建会话密钥,那么对于每个用户,方法可以是:
Session.Remove(Session.SessionID);
您也可以将会话值更新为空:(这就是我正在做的)
Session.Add(sessionKey, null);
我在 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