Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> логирование зарегистрированных юзеров, не все получается отследить... 
V
    Опции темы
AleXGray
Дата 2.12.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.1.2007

Репутация: нет
Всего: 1



Очень хотелось бы получить ответ на следующую проблему.
Делаю систему логирования для сайта для зарегистрированных пользователей.
Для этого у меня на каждого есть файлик, где пишется его лог. Использую  Global.asax, где в 

Application_EndRequest перехватываю запросы и пишу в соответствующий файлик нужную инфу.
Проблема в том, что я не знаю как поймать событие "завершения сессии" юзера...
в Session_End я хотел, но оттуда я уже не могу добраться до имени юзера, для которого 

завершилась сессия...
В Application_EndRequest хотел связать идентификатор сессии и текущего юзера через 

Application[Session.SessionID] = username , но получил ошибку, типа некорректно 

использовать session state в этом обработчике...
В общем хотелось бы идею, как мне все-таки выловить этого уходящего юзера...
--------------------
В начале было Слово
PM MAIL   Вверх
Servena
Дата 2.12.2007, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



А как ты думаешь, сервер знает, что пользователь ушел?
Если на сайте есть кнопке Логаут с соответствующей функцией - то будет знать. 
А так, только если по истечению некоторого времени пользователь не проявит никаких действий - тогда он ушел.


PM MAIL   Вверх
Mymik
Дата 2.12.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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, 
Цитата(Servena @  2.12.2007,  20:54 Найти цитируемый пост)
А так, только если по истечению некоторого времени пользователь не проявит никаких действий - тогда он ушел.

Я немножко не согласен с этим. Для сервере пользователь уходит когда удаляется объект класса запрошенной странице (когда все данные отправлены в Response). И дальше. Session это тот же объект, у которого есть некоторое время жизни (но он совсем не зависит от пользователя... Ну т.е. SessionID то передается в Cookie, а без SessionID мы бы вообще не смогли достучаться до сессии).
Это все равно что пойти и купить билет в театр. Ты пришел, дал деньги за билет (ввел login/password) получил билет, ушел. Для всех структур театра ты ушел. Потом ты приходишь и даешь билет для входа (это cookie авторизации). Дальше ты начинаешь юзать театр. Садишься на свое место (это взаимодействие role и cookie авторизации) smile


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
AleXGray
Дата 3.12.2007, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.1.2007

Репутация: нет
Всего: 1



 Со всем вышесказанным ув. Mymik согласен (примерно так и делал, только без базы), значит по глобальному я на правильном пути, и теперь могу уточнить проблему:
Пишу тестовый код в Global.asax
Код

void Application_BeginRequest(object sender, EventArgs e)
    {
        string a = Session.SessionID;
    }


Получаю ошибку:  Session state is not available in this context

Почему? smile 
или может быть дадите код Application_BeginRequest для Вашего случая?...
--------------------
В начале было Слово
PM MAIL   Вверх
AleXGray
Дата 3.12.2007, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.1.2007

Репутация: нет
Всего: 1



Mymik 

Разобрался. Надо писать:
Код

SessionIDManager s = new SessionIDManager();
string id = s.GetSessionID(HttpContext.Current);

спасибо за толчок в правильном направлении.
--------------------
В начале было Слово
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.