![]() |
|
Модераторы: gambit |
![]()
|
|
| AleXGray |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 18.1.2007 Репутация: нет Всего: 1 |
Очень хотелось бы получить ответ на следующую проблему.
Делаю систему логирования для сайта для зарегистрированных пользователей. Для этого у меня на каждого есть файлик, где пишется его лог. Использую Global.asax, где в Application_EndRequest перехватываю запросы и пишу в соответствующий файлик нужную инфу. Проблема в том, что я не знаю как поймать событие "завершения сессии" юзера... в Session_End я хотел, но оттуда я уже не могу добраться до имени юзера, для которого завершилась сессия... В Application_EndRequest хотел связать идентификатор сессии и текущего юзера через Application[Session.SessionID] = username , но получил ошибку, типа некорректно использовать session state в этом обработчике... В общем хотелось бы идею, как мне все-таки выловить этого уходящего юзера... --------------------
В начале было Слово |
|||
|
||||
| Servena |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 24.7.2007 Где: Днепропетровск Репутация: 4 Всего: 14 |
А как ты думаешь, сервер знает, что пользователь ушел?
Если на сайте есть кнопке Логаут с соответствующей функцией - то будет знать. А так, только если по истечению некоторого времени пользователь не проявит никаких действий - тогда он ушел. |
|||
|
||||
| Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 50 Всего: 78 |
AleXGray, теоретически уход пользователя нельзя отследить. Ибо непонятно ушел он встречать гостей или в туалет захотелось человеку, или он закрыл окно. Совсем чуть-чуть, тебе может помочь событие onclose у body (это JavaScript'овое событие). По этому событию отправлять оповещение о том что пользователь закрыл окно... отправлять с помощью AJAX. дабы не задерживать браузер пользователя.
Но ИМХО это все очень муторно и не правильно. У меня подобная система в проекте реализованная, для того чтобы под одним login не могло одновременно работать несколько человек. Там перехват BeginRequest в Global.asax идет. и записываем SessionID в базу данных. Там есть несколько полей. Типа SessionID, Username, LoginDate, LogoutDate, LastAction. Ну а дальше update таблицe, или insert делаю. Так вот. Если пользователь ушел с сайта. А потом заходит на сайт опять. А он ушел не через logout а через Ctrl+W то при логине я обновляю таблицу путем прописывания последней даты логина в LastAction и делаю insert с новыми данными. Если же пользователь ушел с сайта путем Ctrl+W и потом зашел в другой браузер и опять пытается залогинится. То я проверяю. Мол если погрешность в последним LastAction и переданным временем действия больше чем 10 минут, то я пускаю, а иначе откидываю ошибку. Я к тому, что тебе это тоже очень хорошо поможет. У меня это реализовано не только для запрета множественного логина, но и для Report'ов о проведенном времени пользователей на сайте. Добавлено через 6 минут и 27 секунд Servena,
Я немножко не согласен с этим. Для сервере пользователь уходит когда удаляется объект класса запрошенной странице (когда все данные отправлены в Response). И дальше. Session это тот же объект, у которого есть некоторое время жизни (но он совсем не зависит от пользователя... Ну т.е. SessionID то передается в Cookie, а без SessionID мы бы вообще не смогли достучаться до сессии). Это все равно что пойти и купить билет в театр. Ты пришел, дал деньги за билет (ввел login/password) получил билет, ушел. Для всех структур театра ты ушел. Потом ты приходишь и даешь билет для входа (это cookie авторизации). Дальше ты начинаешь юзать театр. Садишься на свое место (это взаимодействие role и cookie авторизации) -------------------- |
|||
|
||||
| AleXGray |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 18.1.2007 Репутация: нет Всего: 1 |
Со всем вышесказанным ув. Mymik согласен (примерно так и делал, только без базы), значит по глобальному я на правильном пути, и теперь могу уточнить проблему:
Пишу тестовый код в Global.asax
Получаю ошибку: Session state is not available in this context Почему? или может быть дадите код Application_BeginRequest для Вашего случая?... --------------------
В начале было Слово |
|||
|
||||
| AleXGray |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 18.1.2007 Репутация: нет Всего: 1 |
Mymik
Разобрался. Надо писать:
спасибо за толчок в правильном направлении. --------------------
В начале было Слово |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |