2016-02-02 3 views
-2

Мне интересно, как функция выхода из всех устройств реализована на сайте SO? есть ли какое-то управление сеансом?Как работает выход Stackoverflow на всех устройствах?

+0

Я не знаю, как они это делают, но так, как я это делаю, с помощью redis и ключей –

+0

Не уверен относительно подхода SO, но в типичном веб-приложении список сеансов можно сопоставить с идентификатором пользователя и каждым сеансом может быть недействительным при удалении всех устройств. – User2709

+0

@vivek, Пожалуйста, проверьте мой ответ и дайте мне знать. –

ответ

1

Как я это сделал, у меня была колонка в таблице клиентов, которая предназначена для клиентов, которые могут войти в систему.

Этот столбец теперь называется «logout_before» теперь на моей клиентской сессии. У меня также есть переменная с именем «logged_in_at», теперь, если переменная «logged_in_at» будет ниже переменной «logout_before», то это означает, что пользователь должен выйти из системы, а аутентификация завершится неудачно.

Теперь, когда вы хотите выйти из системы, все пользователи просто устанавливают переменную «logout_before» в текущее время или, возможно, текущее время +1, и все пользователи будут выходить из системы.

Но предостережение, если вы измените это вручную и настроите на что-то глупое, как +10 лет, что пользователь не сможет войти в систему на 10 лет, но это не проблема, поскольку система не будет предназначена для чего-то столь же глупым, как это, и это должно было бы быть сознательным или изменить системное время по какой-либо причине. Однако это основано на отметке времени UNIX.

0

Простейший способ сделать это - использовать центральную систему входа/сессии.

Сценарий: у вас есть веб-сайт и мобильное приложение, оба приложения имеют свой собственный код.

Несмотря на различный код, они используют API третьей системы для аутентификации пользователя и вашего сеанса.

Я буду называть эту третью систему «CAS», но нет необходимости быть CAS.

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

Что-то подобное происходит, когда пользователь меняет пароль на устройстве, CAS создаст новый сеанс для этого устройства, а другие, которые со старым сеансом, прекратят его аутентификацию.

Конечно, это один из многих способов сделать это, но это так, как мне нравится.

2

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

Чтобы убить выход из сеанса в системе a, система будет убивать сеанс сервера. Итак, в следующий раз, когда запрос поступит от клиента, не будут отображены файлы cookie сервера, поэтому cookie-клиент также будет убит, и пользователю будет предложено снова пройти аутентификацию.

Как поддерживать сервер, зависит только от дизайна системы. вы можете использовать сеанс хранилища данных, сеанс в памяти.

Позвольте мне, если это поможет.

Спасибо,

0

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

  1. Содержит информацию о компьютере. Он переводится, когда сессия заявлена ​​в PHP. Когда ваша страница загружается, она захватывает информацию из PHP и проверяет ее с идентификатором сеанса.

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

Я хотел бы взглянуть на http://php.net/manual/en/class.sessionhandler.php, так как он объясняет, как работает обработчик сеанса.