Почему не отрабатывает Session_End?

Yaroslave
Дата: 27.04.2007 01:36:00
Доброго времени суток!
Развернул веб-приложение на сервере, так вот, почему-то на нем не срабатывает событие session_end. На том компьютере, где оно писалось, событие вызывалось. Все настройки приложения выставлены правильно, сессия должна обрубаться в течение 20 минут. На iis в свойствах приложения тоже стоит нужная птичка, служба состояний asp.net работает. В чем может быть проблема?
pecha
Дата: 27.04.2007 10:57:07
А каким ты образом проверяешь это?

GoDevs.com - Cheap Domain Names, Free/Cheap ASP.NET AJAX Web Hosting, 24x7 support and much more.
prokhorovserge
Дата: 27.04.2007 11:01:15
Было http://www.gotdotnet.ru/Forums/Web/446667.aspx.
Советую почитать также статью из линка.
Кроме того, Session_End работает только для InProc сессии и если в сессии хоть что-нибудь есть (иначе объект - коллекция не создаётся). И если происходит ошибка, то Session_End отрабатывает silently.
Serge
Yaroslave
Дата: 27.04.2007 16:52:04
А каким ты образом проверяешь это?

GoDevs.com - Cheap Domain Names, Free/Cheap ASP.NET AJAX Web Hosting, 24x7 support and much more.

Достаточно просто: приложение требует авторизации. После того, как она прошла успешно, id пользователя, его ip и время входа заносится в таблицу БД. В приложении добавлен пункт выхода из системы, при щелчке на котором пользователь удаляется из таблицы активных пользователей. Этот же самый код повесил на session_end, потому что если пользователь не выполнит выход, а просто закроет браузер, то его запись останется в таблице, и в следующий раз он просто не войдет (стоит программная блокировка на множественную авторизацию под одним и тем же логином). А поскольку большинство именно просто закрывает браузер, как раз код в session_end и должен автоматически чистить таблицу. Проблема-то именно в том, что видимо событие просто не вызывается, поскольку некорректно вышедшие пользователи могут висеть неделями в базе, и соответственно, не могут войти. Приходится чистить базу вручнуюРасстройство Еще раз повторю, что на компе, на котором приложение писалось, событие отрабатывало. Проверял специально: вечером "забуду" выйти из системы, утром уже пользователя в таблице нет
Jaba
Дата: 27.04.2007 17:17:58
Опасная техника. Чревата именно тем, что Session_end не отработает. И чего дальше делать с этим сервером.
prokhorovserge
Дата: 27.04.2007 17:26:41
Yaroslave:

А каким ты образом проверяешь это?

GoDevs.com - Cheap Domain Names, Free/Cheap ASP.NET AJAX Web Hosting, 24x7 support and much more.


.... Приходится чистить базу вручнуюРасстройство ...

Чтобы чистить базу можно создать Job, если это MS SQL. Или сервис сделать. Или, в крайнем случае, написать логику, которая будет проверять наличие записи с таким ID и удалять её перед добавлением по-новой.
Serge
caplan22
Дата: 27.04.2007 18:03:13
Здрасте, а сам код, срабатывающий по таймауту и удаляющий пользователя из базы находится весь в Global.asax.cs ???

У меня так было.
Решил проблему, когда весь код поместил в Session_End