2016-07-22 13 views
2

Я разрабатываю новое приложение MVC Asp.net, и для меня важно видеть зарегистрированных пользователей и, если время выхода для них, Если пользователь нажимает кнопку выхода, это нормально для меня. Но в большинстве случаев пользователи перемещаются через браузер с веб-сайта или просто закрывают браузер. Есть ли способ это сделать? У меня есть идея запустить действие каждые две минуты, чтобы проверить, есть ли пользователи там или нет. Но это хорошая идея и каковы риски. Если да, то у кого-нибудь есть пример того, как это можно достичь!Пользователь loggoff time

ответ

1

Вы можете использовать функцию JavaScript funtion onbeforeunload. Эта функция вызывается, когда пользователь переходит от страницы.

Эта функция помещает ваш запрос ajax на сервер, чтобы пользователь выгрузил страницу в это время и создал вашу логику.

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

Надеется, что это помогает

+1

Я думал об этом решении, но здесь есть случай, если пользователь открывает несколько вкладок. Как мы можем это нарушить. –

+0

для нескольких вкладок, сохраните последний запрос, полученный пользователем для текущего сеанса. – Waqar

+0

Да, я думаю об этом решении, но что делать, если пользователь открывает несколько браузеров или открывает его на нескольких устройствах. Я думаю, что это решение будет сложно, поскольку проект станет больше. В любом случае, спасибо за ваш ответ. Если вы можете увидеть мой комментарий ниже, чтобы узнать, хорошая ли это идея или нет. –

2

Я искал ту же самую вещь, 2 дня назад. Мой подход в настоящее время выглядит следующим образом:

  1. Журналы пользователя в

    • Я сохранил некоторые данные в базе данных, как ключ сеанса и идентификатор пользователя, чтобы идентифицировать его. Я также сохраняю время входа в систему и обновленную DateTime.
    • Я сохраняю это только в том случае, если пользователь уже прошел аутентификацию.
  2. Пользователь вызывает действие,

    • Я обновляю DateTime в базе данных для каждого действия пользователя выполняет.
  3. Пользователь использует кнопку выхода из системы

    • Я переместить запись в базе данных от «сессии» таблицы в «sessionHistory» и обновлять DateTime ко времени выхода из системы.
  4. Пользователь закрывает браузер (Это где она становится сложнее)

    • Я построил очень небольшой кусок кода с JQuery. Я вызываю $ .get и выставляю действие «UpdatePing» в MVC каждые 30 секунд.

    • Действие «UpdatePing» обновит запись сеанса в базе данных. Теперь я вижу, действительно ли его браузер открыт.

    • ВНИМАНИЕ: Вы точно не узнаете, когда пользователь закрыл вкладку/браузер. Вы можете попытаться использовать событие «beforeunload», но я бы не стал на него полагаться (сбой в браузере и т. Д.).

  5. Удаление истекшие сессии

    • Я не полностью удалять данные сессии. Я копирую данные сеанса в таблицу «sessionHistory».
+0

Я только что видел ваш комментарий в другом вопросе (относительно нескольких вкладок). Вы можете попытаться рассчитать его на основе pings. – KampfFussel

+1

Пинг в каждой сессии накладывает много накладных расходов в конкурентной среде, особенно когда вы можете использовать одну встроенную функциональность javascript onbeforeunload. или даже ajax toolkit для ping-сервера только один раз, когда пользователь закрывает окно и сохраняет последний запрос пользователя для оценки EXACT времени пользователя, покидающего ваше приложение. – Waqar

+0

Это правда, несмотря на то, что onbeforeunload не срабатывает, если браузер не закрыт должным образом. Если это не так важно, пропустите обновления для ping и сеанса и перенаправьте на страницу выхода с событием onbeforeunload. – KampfFussel

0

Спасибо всем за ваши ответы, но как ответы могут получили сложным на пути, когда проект будет больше. Например, я собираюсь поддержать приложение с помощью мобильного приложения. Я нашел, что лучшим решением является использование SignalR для отправки одиночного от клиента на сервер, и когда эти одиночные остановки на какое-то время я автоматически выйду из системы.

+0

SignalR после каждого интервала для каждого пользователя ставит большие накладные расходы. APart от этого будет огромным использованием ресурсов. – Waqar

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

  • Нет связанных вопросов^_^