Когда вызывается Session_End() в ASP.NET MVC?

Я сконфигурировал свой файл Web.Config следующим образом в проекте ASP.NET MVC 2:

<sessionState mode="InProc" timeout="1"/>

И добавил в Global.asax.cs следующее:

protected void Session_End(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_End");
}

protected void Session_Start(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_Start");
}

Session_Start() вызывается, когда новый пользователь переходит на веб-сайт. Я бы ожидал, что Session_End() будет вызываться через 1 минуту простоя, но это не так. Я что-то пропустил?

Ответы

Ответ 1

Будьте терпеливы. Событие следует вызывать, но не обязательно сразу после таймаута.

Вы можете попробовать из браузера: начать сеанс, подождать > 1 минута, сделать Postback как-то

Это должно помочь проверить, работает ли Timeout, и я думаю, что вы также увидите SessionEnd, происходящее в то время. В противном случае просто подождите и начните другие сеансы. Система придет вокруг, когда-нибудь вызовет ее.

Ответ 2

Помните об этом:

Если вы ничего не сохраняете в сеансе, session_end не будет Огонь. Если вы сохраняете данные в сеансе в первом запросе и вызываете отказ в тот же запрос session_end также не будет запущен.

Надеюсь, это поможет!

Т

Кстати: Событие Session_End ASP.NET не запускается

Ответ 3

Совет для тестирования: используйте Session.Abandon чтобы вам не приходилось связываться с фактическим значением web.config. Просто не устанавливайте значение сеанса и не вызывайте Session.Abandon во время того же запроса, иначе он не будет сохранен.