Как избежать многократного входа в систему для одного и того же пользователя - PullRequest
9 голосов
/ 16 марта 2011

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

Проблема в том, что когда они закрывают окно браузера без выхода из системы, они больше не смогут войти в систему.

Есть ли лучший способ справиться с этим?

Ответы [ 4 ]

6 голосов
/ 16 марта 2011

Вы должны удалить информацию в таблице о глобальном событии Session_End в global.asax.cs файле

protected void Session_End(Object sender, EventArgs e)
{
    //delete from database where userID = Session["userID"]
}
2 голосов
/ 16 марта 2011

Если мы говорим о режиме сеанса StateServer или SQLServer, то событие:

Session_End сработает при вызове Session.Abandon().На сервере sql есть задание ASPState_Job_DeleteExpiredSessions, срок действия которого истекает, если пользователь не вышел из системы с помощью кнопки выхода.Этот вызов задания DeleteExpiredSessions хранимой процедуры, поэтому я полагаю, что вы должны поместить некоторую логику (удалить зарегистрированного пользователя) в эту хранимую процедуру.

из документации :

Вы можете обработать событие Session_OnEnd, добавив подпрограмму с именем Session_OnEnd в файл Global.asax.Подпрограмма Session_OnEnd запускается, когда был вызван метод Abandon или когда истек срок сеанса.Сеанс истекает, когда количество минут, указанное свойством Timeout, проходит без запроса на сеанс.

Событие Session_OnEnd поддерживается только в том случае, если для свойства режима состояния сеанса установлено значение InProc, котороепо умолчанию.Если режимом состояния сеанса является StateServer или SQLServer, то событие Session_OnEnd в файле Global.asax игнорируется .Если для режима состояния сеанса установлено значение Пользовательский, то поддержка события Session_OnEnd определяется настраиваемым поставщиком хранилища состояний сеанса.

Вы можете использовать событие Session_OnEnd для очистки информации, связанной с сеансом, такой как информация дляпользователь, который отслеживается в источнике данных по значению SessionID.

1 голос
/ 16 марта 2011

Сокращает время ожидания сеанса, а когда сеанс прерывается, автоматически отключается от пользователя

0 голосов
/ 16 марта 2011

Просто сохраните одну переменную сеанса, сказав true / false в зависимости от состояния входа в систему.True - пользователь уже вошел в систему, False - не вошел в систему.

Во многих случаях у меня есть объект User, сохраненный в сеансе, поэтому я просто проверяю его по null, который просто возвращает аутентифицированного пользователя илиnull (анонимно).

Достаточно просто и без использования БД.

EDIT :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...