哈哈,好吧...看起来你可以。我想知道自己是否有任何方法可以做到这一点,事实证明,有。
当您使用 InProc 时,InProcSessionStateStore(内部类)将会话状态保存在内部(非公共)缓存中。您可以通过反射访问此缓存并手动删除会话状态。
using System;
using System.Reflection;
using System.Web;
object obj = typeof(HttpRuntime).GetProperty("CacheInternal",
BindingFlags.NonPublic | BindingFlags.Static)
.GetValue(null, null);
if (obj != null)
{
MethodInfo remove = obj.GetType()
.GetMethod("Remove", BindingFlags.NonPublic | BindingFlags.Instance,
Type.DefaultBinder, new Type[] { typeof(string) }, null);
object proc = remove.Invoke(obj, new object[] { "j" + state.SessionID });
}
最终结果是,下一个请求将采用相同的 SessionID,但 HttpSessionState 将为空。您仍然会收到 Session_Start 和 Session_End 事件。