Мне интересно, как функция выхода из всех устройств реализована на сайте SO? есть ли какое-то управление сеансом?Как работает выход Stackoverflow на всех устройствах?
ответ
Как я это сделал, у меня была колонка в таблице клиентов, которая предназначена для клиентов, которые могут войти в систему.
Этот столбец теперь называется «logout_before» теперь на моей клиентской сессии. У меня также есть переменная с именем «logged_in_at», теперь, если переменная «logged_in_at» будет ниже переменной «logout_before», то это означает, что пользователь должен выйти из системы, а аутентификация завершится неудачно.
Теперь, когда вы хотите выйти из системы, все пользователи просто устанавливают переменную «logout_before» в текущее время или, возможно, текущее время +1, и все пользователи будут выходить из системы.
Но предостережение, если вы измените это вручную и настроите на что-то глупое, как +10 лет, что пользователь не сможет войти в систему на 10 лет, но это не проблема, поскольку система не будет предназначена для чего-то столь же глупым, как это, и это должно было бы быть сознательным или изменить системное время по какой-либо причине. Однако это основано на отметке времени UNIX.
Простейший способ сделать это - использовать центральную систему входа/сессии.
Сценарий: у вас есть веб-сайт и мобильное приложение, оба приложения имеют свой собственный код.
Несмотря на различный код, они используют API третьей системы для аутентификации пользователя и вашего сеанса.
Я буду называть эту третью систему «CAS», но нет необходимости быть CAS.
Когда пользователь выходит из системы на всех устройствах, CAS начнет сообщать, что сеанс пользователя недействителен и его необходимо снова занести в журнал.
Что-то подобное происходит, когда пользователь меняет пароль на устройстве, CAS создаст новый сеанс для этого устройства, а другие, которые со старым сеансом, прекратят его аутентификацию.
Конечно, это один из многих способов сделать это, но это так, как мне нравится.
Вот он, если вы хотите управлять сеансом на уровне устройств, у вас будут как клиентские, так и серверные файлы cookie. Все устройства будут иметь свои собственные клиентские куки-файлы, каждый раз, когда запросы отправляются на сервер, сервер проверяет файлы cookie клиента на файлы cookie сервера. Если он соответствует, это позволит продолжить сеанс.
Чтобы убить выход из сеанса в системе a, система будет убивать сеанс сервера. Итак, в следующий раз, когда запрос поступит от клиента, не будут отображены файлы cookie сервера, поэтому cookie-клиент также будет убит, и пользователю будет предложено снова пройти аутентификацию.
Как поддерживать сервер, зависит только от дизайна системы. вы можете использовать сеанс хранилища данных, сеанс в памяти.
Позвольте мне, если это поможет.
Спасибо,
Когда сервер общается с клиентом, она признает сессию и позволяет ей продолжать. Например, скажем, есть два идентифицирующих свойства.
Содержит информацию о компьютере. Он переводится, когда сессия заявлена в PHP. Когда ваша страница загружается, она захватывает информацию из PHP и проверяет ее с идентификатором сеанса.
Содержит информацию о вашей учетной записи. В нем перечисляется количество сеансов, которые разрешено быть активными, и управляет им на основе первого идентифицирующего свойства.
Я хотел бы взглянуть на http://php.net/manual/en/class.sessionhandler.php, так как он объясняет, как работает обработчик сеанса.
Я не знаю, как они это делают, но так, как я это делаю, с помощью redis и ключей –
Не уверен относительно подхода SO, но в типичном веб-приложении список сеансов можно сопоставить с идентификатором пользователя и каждым сеансом может быть недействительным при удалении всех устройств. – User2709
@vivek, Пожалуйста, проверьте мой ответ и дайте мне знать. –