Заставлять пользователей выходить из системы, когда они покидают мой php-сайт?

StackOverflow https://stackoverflow.com/questions/2510839

  •  22-09-2019
  •  | 
  •  

Вопрос

В моем php-приложении я использую $_SESSION для отслеживания того, вошел ли пользователь в систему.Если пользователь покидает любую страницу моего сайта по адресу http://mysite.com и направляется к http://someotherwebsite.com, я хочу автоматически вывести их из системы, чтобы, если они вернутся на любую страницу на http://mysite.com, им нужно снова войти в систему.

Есть ли простой способ сделать это?

Это было полезно?

Решение

Вы не можете явно сказать, когда пользователь листья На вашем сайте лучше всего установить тайм-аут для ваших сеансов.

Как сказано в большинстве ответов, вы мог проверьте событие JavaScript onbeforeunload но пользователь может обойти это, отключив JavaScript или, как BalusC отметил, используя веб-браузер, который его не поддерживает, например Opera.

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

Другие советы

Вы можете выполнить вызов AJAX в onbeforeunload событие в какой-то скрипт на стороне сервера, который завершит сеанс.

За исключением установки тайм-аута для ваших сессий - не совсем.Единственный способ, который приходит на ум, это onbeforeunload Событие JavaScript, которое срабатывает, когда пользователь покидает текущую страницу, но это событие не знает об этом. где пользователь собирается.Однако вы могли бы, если бы вы Действительно хочу сделать это, может быть создайте что-нибудь на основе следующего хакерского обходного пути (непроверено):

  • установить onbeforeunload событие, которое отправляет вызов AJAX на ваш сервер.(Как сделать это успешно - чтобы вызов прошел до закрытия страницы - это отдельная проблема, поиск "onbeforeunload ajax" в SO должен дать некоторые результаты.

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

  • Если пользователь покидает ваш сайт, применяется обратный отсчет.

  • Если пользователь переходит на другую страницу вашего сайта, вы очищаете все «обратные отсчеты» при переходе на следующую страницу.

Это, вероятно, будет шатким, поскольку может случиться так, что запрос Ajax начиная обратный отсчет поступает на сервер после того, как следующая страница уже была устранен этот обратный отсчет.Но если вам действительно нужно это сделать, возможно, это направление.Разумеется, работает только для пользователей с включенным JS.

Вторая идея, как реализовать это, состоит в том, чтобы установить чрезвычайно малое время ожидания для сеансов (например,90 секунд), и поставить iframe на каждой странице, которую вы обслуживаете.Затем этот iframe будет вызывать страницу каждые 60 секунд.

Это будет работать без JavaScript, но может создавать раздражающие щелчки в старых версиях Internet Explorer (я не знаю, прекратилось ли это в 6 или 7?)

Вы не можете (но через некоторое время время ваших сеансов автоматически истечет;чтобы вы могли установить небольшой тайм-аут).

Судя по тому, что я знаю о PHP (а это немного), узнает ли ваше приложение когда-нибудь о том, что они покинули сайт?Если вы зайдете на someotherwebsite.com, ваш код не будет вызываться снова, пока они не вернутся.

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

Как упоминает Кристофер, вы можете установить тайм-аут сеанса.Просто помните, что ваш сайт будет обновляться только тогда, когда сервер получит сообщение или какой-нибудь пинг javascript.

Надеюсь, Это поможет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top