2013-03-06 2 views
0

Я хочу заблокировать пользователей от доступа к моему приложению ColdFusion более одного раза в одно и то же время.Блокировать пользователей от многократного входа на сайт

У меня есть таблица SQL с dtLogin, dtLogLastUpdate, ip и isLogged.

Логика:

Тайм-аут сеанса составляет 1 час.

Когда пользователь входит в систему,

  • набор dtLogin = DATESTAMP Теперь
  • dtLogLastUpdate = даты: Теперь
  • IP = пользователем IP
  • isLogged = 1

Я использую вызов AJAX для обновления dtLogLastUpdate каждые 1 минуту.

Когда я получаю запрос для входа в систему для пользователя, разрешайте только isLogged 0 ИЛИ dtLogLastUpdate - это больше, чем мой тайм-аут сеанса в прошлом.

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

+2

Я бы предпочел использовать onSessionEnd для регистрации людей аутоматично. Это касается людей, которые закрывают свои браузеры. Также, если браузер закрыт, DtLogLastUpdated будет состоять из x минут. Если браузер был открыт и выполняет вызов ajax, сеанс останется активным и обновит dtLogLastUpdated. Вы также можете искать приложения «coldfusion who's online». есть старый, который может предоставить образцы кода. – steve

+0

Возможно, вы можете выйти из «старого пользователя» и разрешить «новый пользователь» входить в систему. –

+0

Вы не можете сравнить 'dtLogLastUpdate' с текущим временем? Если он не заглянул за минуту, я думаю, вы можете предположить, что они закрыли вкладку. –

ответ

2

Я бы создал переменную приложения, называемую currentUsers.

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

Когда пользователь пытается войти в систему, проверьте список для имени пользователя. Если его нет, добавьте имя пользователя в список и разрешите им войти в систему. Если имя пользователя существует, отправьте их на заданную по умолчанию «слишком плохую, такую ​​печальную» целевую страницу.

<cfif listFindNoCase(application.currentUsers, form.userName)> 
    <cflocation url = "shameOnYou.cfm"> 
<cfelse> 
    <cfset listAppend(application.currentUsers, form.userName)> 
    <cfset session.whatever> 
</cfif> 

В вашем Application.cfc используйте onSessionEnd, чтобы удалить имя пользователя из списка.

<cffunction onSessionEnd...> 
    <cfset listDeleteAt(application.currentUsers,listFind(application.currentUsers, session.userName))> 
</cffunction> 

Преимущество этого вам не нужно использовать AJAX для обновления лог-файл каждые 60 секунд, снижая фоновые процессы.

+1

Вы можете упомянуть, что недостатком этого является то, что пользователю нужно будет дождаться окончания сеанса (1 час в случае OP), прежде чем они смогут снова войти в систему. Когда они не выходят из системы должным образом. –

+0

Нет, если он использует управление сеансом J2EE. – Travis

+0

Если они закрывают свой существующий браузер (все) и открывают новый. Я также упомянул об этом в моем комментарии выше. Это то, о чем вы тоже говорите? –

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