我们有ASP.NET应用程序,想要从所有用户的所有会话中删除所有会话变量吗?
我的意思是不要仅使用以下方法从当前会话中删除会话变量:
Session.Clear();
或:
Session.Abandon();
我们还需要从其他用户的会话中清除会话变量吗?
答案 0 :(得分:3)
您无法清除所有会话,而是转发回收app_pool,这将自动清除会话。见这里 - >
答案 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