Заставить пользователей выйти из системы, когда они покидают мой php-сайт? - PullRequest
2 голосов
/ 24 марта 2010

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

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

Ответы [ 7 ]

11 голосов
/ 24 марта 2010

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

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

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

2 голосов
/ 24 марта 2010

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

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

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

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

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

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

2 голосов
/ 24 марта 2010

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

1 голос
/ 24 марта 2010

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

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

0 голосов
/ 24 марта 2010

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

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

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

0 голосов
/ 24 марта 2010

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

0 голосов
/ 24 марта 2010

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

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