проверьте, вошли ли пользователи уже в систему?

как Вы проверяете, вошел ли пользователь уже в систему?

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

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

6
задан ajsie 27 December 2009 в 02:36
поделиться

4 ответа

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

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

.
1
ответ дан 17 December 2019 в 02:29
поделиться

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

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

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

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

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

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

.
2
ответ дан 17 December 2019 в 02:29
поделиться

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

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

.
3
ответ дан 17 December 2019 в 02:29
поделиться

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

.
0
ответ дан 17 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: