2015-03-13 7 views
2

Я пытаюсь ограничить одновременный вход (то же имя пользователя & pwd) в моем приложении yii, для этого я добавил одно поле в пользовательскую таблицу «login_status». если пользователь вошел в систему, login_status = 1, если пользователь правильно выйдет из системы, используя значок входа в систему, мы возвращаемся к login_status = 0.Ограничить одновременный вход

Основываясь на этом login_status, мы ограничиваем одновременный вход (login_status = 1, ошибка бросания). Пользователь уже подключен ").

Но мы сталкиваемся с проблемой, когда пользователь закрывает вкладку браузера или окно или систему резко останавливается. Всегда login_status = 1, вызывая ошибку «Пользователь уже подключен».

Пожалуйста, помогите мне решить эту проблему!

ответ

0

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

0

Нет прямого способа для этого. Вам нужно заставить сервер выполнить некоторую проверку автоматически. Вы должны использовать что-то вроде Cron Job. В таблице должно быть поле, например last_access_date_time. Каждый раз, когда пользователь запускает действие в системе, это поле будет обновляться. Теперь вам нужно написать скрипт, который запускается, например, каждые 5 минут на сервере. Этот скрипт проверяет пользователя last_access_date_time для каждого пользователя, если это поле больше, чем 5 минут назад, вы должны установить для пользователя login_status = 0. Вы можете найти задание Cron для обучения Как выполнять запланированные задачи на сервере.

+0

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

0

Если пользователь не вышел из строя (через кнопку), я не могу видеть, как вы можете заставить такое поведение без какой-либо задержки времени ожидания. Предполагается, что пользователь будет входить в свою учетную запись из другого браузера & ip. Если это из одного и того же браузера или IP, вы можете использовать cookies или php's session data, чтобы остановить дублирование логинов.

0

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

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