2009-12-27 4 views
6

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

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

также, это хорошее решение или я должен позволить пользователю войти в другой браузер, а затем выйти из текущего пользователя и отобразить сообщение (вы вошли в систему из другого места), как это делает Messenger?

ответ

1

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

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

3

Создайте случайный токен при входе (или используйте sessionid) и сохраните его в базе данных и в cookie пользователей. При каждом доступе к странице убедитесь, что токен пользователей соответствует записи базы данных. Если они не совпадают, сообщите пользователю, что они вошли в другое место.

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

+0

Хранение идентификатора сеанса в базе данных еще лучше. – TravisO

+0

Это тоже сработает, TravisO :) – Sampson

2

Использование sessions - хороший способ сделать это и является очень распространенным методом контроля подлинности.

Поток обычно выглядит примерно так: посещение сайта

  • пользователя и session_start() называется. Для этого посетителя установлен уникальный идентификатор сеанса (т. Е. Cookie).
  • Пользователь отправляет свои учетные данные для входа в форма входа
  • Вход учетных данные проверяются, и этот факт хранится в данном сеансе с $_SESSION['logged_in'] = true, или нечто подобным
  • Для остального времени пользователя на сайте, вы может проверить $_SESSION['logged_in'], чтобы увидеть, если пользователь вошел в систему.

для того, чтобы управлять логины пользователя, вы могли бы просто иметь поля в базе данных (users таблица отлично) указывает на то, что текущий идентификатор сессии (извлекаться с session_id()) для пользователя, и если он не соответствует значению cookie, вы jus t, то вы сразу же вызываете session_destroy() для этого идентификатора и считаете, что пользователь вышел из системы.

Использование $_SESSION означает, что вам не нужно беспокоиться о создании собственных токенов и дает возможность встроенным суперглобалам облегчить хранение информации о состоянии аутентификации пользователя.

Лично я позволил бы нескольким сессиям быть активными для пользователя для большинства веб-сайтов, поскольку, как правило, нет веской причины не делать этого, но это, очевидно, зависит от характера сайта. Однако сохранение текущего активного идентификатора сеанса, упомянутого выше, является довольно простым способом для этого.

+0

Также не забудьте создать новый сеанс после входа в систему, если вы только создаете сеанс при просмотре первой страницы в форме входа и не регенерируете, есть способы использовать этого пользователя , – TravisO

0

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

0

вы можете сделать таблицу, как userLoginStatus с полями, как clockIn время & clockOut времени, и вставить текущее время в clockIn когда пользователь сделать логин, оставьте clockOut время пустым в то время, она должна быть обновлена ​​только тогда, когда пользователь может делать часы over logout, , чтобы вы могли проверить текущий статус конкретного пользователя, где clockOut пуст, чтобы пользователь должен был войти в систему, потому что он обновлялся только при выходе пользователя из системы.