2013-09-03 2 views
2

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

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

+2

Это почти всегда легче реализовать «, если они начинают новую сессию, все предыдущие сессии прекращаются »- он по-прежнему достигает только одного сеанса регистрации на пользователя, но его намного проще реализовать, и пользователи могут автоматически исправлять проблемы, если их компьютер внезапно загорелся и потерял возможность подключения к сети. –

ответ

7

В файле Global.asax у вас есть Session_OnEnd()

public void Session_OnEnd() 
{ 
    // Set flag to 0 
} 

Это будет хорошо, если ваш sessionState установлен в INPROC (который является значением по умолчанию), если вы вручную adjsuted его StateServer или SQL Server то это событие будут проигнорированы.

Когда браузер закрывает окно, которое вы можете сделать использование onbeforeunload в JavaScript

window.onbeforeunload = function(e) { 
    // call an Ajax function to reset the state. 
}; 
+0

Возможно, стоит упомянуть, что 'Session_OnEnd' никогда не будет запущен, если вы используете состояние сеанса вне процесса (которое вы, вероятно, используете, если вы работаете в WebFarm). –

+0

@DarinDimitrov - обновлен. –

+0

sir имеют хранилище UserID в сеансе и Session_OnEnd(), запущенное на сеансе, истек, но для сброса флага мне нужны данные, которые находятся в сеансе, так как я должен получить эти данные, чтобы сбросить флаг – Rhushikesh

0

Просто создайте столбец isloggedin в базе данных

например:

USERNAME | PASSWORD | isloggedin | logintimestamp 

    user | pass  | 0   | 3/9/2013 23:59:59 

и установить его в 1, когда пользователь регистрируется, и в то время как пользователь регистрируется в использовании ajax для обновления текущего времени в db ...

, если это не удается сделать, делают функции таймера для проверки значения LoggedIn в зависимости от временной метки http://dev.mysql.com/doc/refman/5.1/en/events.html

здесь учебник: http://www.sitepoint.com/how-to-create-mysql-events/

+0

И когда вы установите его на 0? –

+0

, когда пользователь выходит из системы -_- –

+0

И что произойдет, если он закроет браузер и не выйдет из системы? Вы прочитали оригинальный вопрос? Это именно то, что спрашивает здесь ОП? Например, пользователь убивает браузер в своем диспетчере задач. Что происходит в вашей базе данных с этим значением? Он остается 1 для вечности, препятствуя этому пользователю когда-либо снова регистрироваться? –

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