2014-01-29 2 views
0

Мне нужно показать данные о времени входа пользователя. У меня есть две таблицы. Один из них - UserMaster, который содержит UserDetails, а другой - UserLogInTimeDetails, содержит два столбца UserId и LogedInTime. Когда пользователь регистрируется в UserId и LogInTime в UserLogInTimeDetails. Когда User Log Off Я удаляю строку этого конкретного пользователя из UserLogInTimeDetails.Показать данные пользователя

Но проблема в том, что пользователь закрывает браузер, а затем детали пользователя, не удаленные из таблицы UserLogInTimeDetails. Для чего этот пользователь не сможет снова войти в систему.

Как решить эту проблему? У меня есть googled и увидел, что событие закрытия браузера невозможно обработать, и во многих местах они советуют использовать событие onbeforeunload, которое не работает для меня.

Пожалуйста, помогите. У меня большие проблемы.

+0

не могли бы вы вставить код. Что вы сделали до сих пор? –

+0

Это классическая проблема, возможно, ваш лучший подход - это иметь какой-то LastActivity и время его завершения. – Liath

+0

Не включайте теги в заголовок !! –

ответ

0

Возможно, вы можете заставить его работать с помощью Session_End в файле global.asax, чтобы удалить пользователя, когда истекает их сессия. Хотя я не уверен на 100%, если вы можете получить идентификатор сеанса из этого метода. Это может быть в пределах EventArgs ...

void Session_End(Object sender, EventArgs e) { 
    //Remove user from database here 
} 

Else, другой способ хранения данных основываются на последнюю активность, поэтому каждый раз, когда пользователь отправляет запрос при обновлении времени последней активности. Вы даже можете сохранить это с идентификатором сеанса в базе данных вместе со своим временем входа в систему, а затем сможете рассчитать продолжительность активного времени от времени входа в систему до последнего действия для этого сеанса;

0

Важно ли, чтобы пользователь не мог войти в систему несколько раз из разных браузеров?

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

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

Вы можете получить доступ к этим переменным, как это:

// Set it like this. Can be any type of object with login data. 
Session["LoginData"] = "Hello"; 

// Get it like this. 
string test = (string)Session["LoginData"]; 

Edit: Если это важно, что пользователь должен моголя Войти несколько раз, у вас есть гораздо большая проблема решить. Возможно, что-то подобное может быть решением?

  • Пусть браузер (через AJAX) пинговать веб-сервер так или иначе, каждые несколько секунд или так (сколько зависит от того, как долго вы хотите, чтобы браузер быть закрыт до это нормально войти снова против трафика)
  • Когда сервер получает пинг от определенного пользователя, отметьте дату и время в переменной сеанса.
  • Если браузер пытается каким-либо образом получить доступ к веб-странице, сначала проверьте сеанс и сколько времени прошло последнее ping. Если сеанс равен NULL, или время больше, чем время между pings * 2 (или что-то в этом роде), пользователь может снова войти в систему (отправить на страницу входа). Если время короче, проверьте, вошел ли пользователь в систему. Если он есть, продолжайте. Если нет, скажите ему, что он должен выйти из первой связи (или что угодно).

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

+0

Никто не может входить в систему только один раз за раз – user3193557

+0

Хорошо, мне очень жаль, но так как сегодня веб-сайт не является потоком данных, поступающих назад и вперед (как в TCP/IP-соединении), я считаю, это трудно реализовать. Сервер не будет знать, когда пользователь закроет браузер. – einord

+0

user3193557: Я отредактировал комментарий для подхода, в котором пользователь должен войти в систему только один раз. – einord

0

Лучший способ пойти с этим использованием сигналаR. Вы можете отслеживать пользователя онлайн или офлайн. на основе даже утилизации вы можете отслеживать точный выход из системы или закрыть браузер.

Надеюсь, это научит вас чему-то новому. см. ссылку ниже для простого примера signalR.

signalR sample application for online, offline status

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