2009-05-18 5 views
1

Во время сеанса Start каждый имеет доступ к объекту Request. Как насчет окончания сеанса, у него все еще есть доступ к объекту Request? Например, я хочу подсчитать, сколько браузеров подключено к моему приложению.Состояние сеанса asp.net

Редактировать 1: Если Session End не имеет доступа к объекту запроса, к какой информации у него есть доступ? ID сессии и т. Д.?

Редактировать 2: Если сеанс завершения не может использоваться для отслеживания отключений, как отключить отслеживание отключений в ASP.Net?

Thanks

ответ

1

Session_End будет запущен, если вы используете InProc.

Session_End уволят 1) после п минут бездействия (п = значение тайм-аута), или 2), если кто-то называет Session.Abandon()

Session_End не уволят, если один закрывает браузер ,

Session_End требует установки состояния сеанса.

Если нужны исходные данные Request.Browser, следует сохранить его в состоянии сеанса.

Во время Session_End он имеет доступ к состоянию сеанса.

+0

Можете ли вы привести пример доступа к сеансу в Session_End. Я не могу добраться до него ... –

+0

void Session_End (отправитель объекта, EventArgs e) { \t string str = Session [browser]; } –

1

Нет, объект Request не доступен в конце сеанса.

Обратите внимание, что сеанс завершается только при вызове Session.Abandon() из кода, а не когда сеанс истекает из-за естественного таймаута или чего-то-вы. Следовательно, это не надежный метод для отслеживания отключений.

+0

Привет, Rex, спасибо за ваш ответ, как отслеживать текущие сеансы браузера в моем приложении (например, сеансы Firefox 5, сеансы IE 10 и т. Д.). –

+0

Из документов MSDN «Подпрограмма Session_OnEnd запускается при вызове метода Abandon или при истечении срока действия сеанса». http://msdn.microsoft.com/en-us/library/ms178583(VS.80).aspx –

+0

@GregB это так говорит, но в первый раз, когда я попытался понять, почему Session_End не работает так, как я ожидал, я оставил отладчик, подключенный к процессу с точкой останова на моем сеансе Session_End, и он никогда не попадал, если я явно не назвал Session.Abandon() –

0

из the documentation

Session_OnEnd событие происходит, когда сеанс прекращается или тайм-аут. Из встроенных объектов сервера используется только объект приложения , объект сервера и Объекты объекта сеанса.

Замечания

Вы не можете вызвать метод Server.MapPath в сценарии Session_OnEnd. По умолчанию , Session_OnEnd работает как Анонимный пользователь, как определено для приложения . В случае, если не является анонимным пользователем или Logon для анонимного пользователя не работает, функция OnEnd не будет вызываться, а будет регистрироваться событие.

+0

Я никогда не видел, чтобы Session End был запущен, когда сессия закончилась. У вас есть? –

+1

@Rex M: Session End только срабатывает, если вы используете in-process сеансы, а не если вы используете сервер состояний или SQL Server в качестве хранилища сеансов. – Rytmis

Смежные вопросы