2010-06-02 3 views
1

если войти в один сеанс ... как заблокировать вход в систему с другого сеанса одним и тем же идентификатором пользователя & пароль ...?код входа с сеансом

+2

Что произойдет, если пользователь закрывает браузер, и они теряют свою сессию? Или их компьютер падает? Или ... –

+0

Сессии имеют уникальные идентификаторы, теоретически не должно быть проблем с двумя разными сеансами с именем пользователя/паролем. – Ben

+0

+1 Это законный вопрос – stacker

ответ

3

Вы можете обработать это в 2 частях. Первая - это политика/конфигурация. Установите тайм-аут вашего файла cookie на идентификаторе сессии примерно 15 минут. Пока пользователь использует один и тот же браузер, они могут открывать столько вкладок, сколько захотят, и даже открывать и закрывать браузер, и они все равно будут зарегистрированы. Через 15 минут куки-файлы сеанса будут удалены вместе с sessionID , и они должны будут повторно аутентифицироваться, если они еще не посетили страницу.

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

Наконец, вы можете захотеть обеспечить способ устранения неоднозначности, который является «реальным» владельцем счета, в случае, если их имя пользователя/пароль скомпрометирован. Если кто-то заходит в систему и получает отказ, потому что их учетная запись используется, они могут захотеть аутентифицироваться и выгнать другого. Вы, вероятно, не хотите иметь дело с этим вручную, поэтому сделайте для них какой-то механизм auth, чтобы сделать это, не прослушивая вас. Вероятно, вы захотите зарегистрировать IP-адрес правонарушителя и, возможно, заблокировать их от входа в эту учетную запись с нарушением IP. (Таким образом, вы не заблокировать все учетные записи для всех пользователей AOL, например)

+0

мы не можем сделать это, как Yahoo Mail ..... если он posable .... тогда плз отправить код .. благодаря – 2010-06-03 04:26:51

-1

Ну, есть много способов, чтобы сделать это ... один я использую больше всего:

1. имеют @ пользователей таблицы одно поле, которое будет принимать идентификатор сессии, когда Войти успешно произошло ...

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

3. Когда попытки входа в систему, просто проверить это поле очищается ...

Это только общая идея, но должен поставить вас на пути к свету :)

+0

если я закрыть без logout..then я не могу войти еще раз с помощью идентификатора пользователя и пароля ... может у мне помочь в этом Понт ... спасибо ... – 2010-06-03 04:24:05

0

Если вы хотите запретить кому-то использовать двойной логин, вы должны использовать что-то, предоставляющее глобальный контекст, может быть, это база данных, где вы храните сеансы, или что-то вроде APC, использующего apc_fetch/apc_store. Каждая страница может проверить, действителен ли текущий сеанс, каждый вход в систему для учетной записи делает недействительными другие сеансы одной учетной записи.

+0

если я закрыть без logout..then Я не могу снова войти в систему по идентификатору пользователя и паролю. ... может у мне помочь в этом Понт и отправить некоторый скрипт, плз ... спасибо – 2010-06-03 04:31:08

1

Как указано в других ответах и ​​комментариях, ограничение учетной записи пользователя на один сеанс несколько сложно. Проблема в том, что пользователи (мой опыт) не выходят из системы. С другой стороны, PHP также не уведомляет вас, когда он разрушает сеанс, поэтому вы не можете выполнять какие-либо задачи.

Если вы хотите придерживаться PHP встроенной сессии я хотел бы использовать такой подход, как это:

  • Всякий раз, когда пользователь входит в систему вставки идентификатор сессии в таблице пользователей (перезаписывать, если есть уже другая сессия ID)
  • на каждой странице хит проверки, если текущий идентификатор сессии равен одному в таблице пользователей (если не session_destroy())

Таким образом, каждый раз, когда кто-то входит в систему, все его старые сеансы аннулируются. Таким образом, нет никаких проблем с «потерянными» сеансами. Недостатком является то, что ему нужно выполнить дополнительный запрос для каждой pageload.

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