Хаха, хорошо ... Похоже, ты можешь. Мне было интересно, есть ли способ сделать это, оказывается, есть.
Когда вы используете 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.