Как определить, что последняя вкладка, содержащая мое PHP-приложение, закрывается? - PullRequest
3 голосов
/ 16 октября 2011

У меня есть хорошая кнопка LogOut в меню моего приложения PHP, но некоторые люди не используют ее, они просто выходят из браузера.

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

Это будет мой первый кусок JS.

  • Я предполагаю, что могу легко написать обработчик закрытия страницы? Или я должен использовать onbeforeunload ()?
  • В нем, возможно, я могу пройти все окна браузера и их вкладки (одинаковые или разные для каждого браузера? (IE, FF и т. Д.))
  • Я могу получить URL каждой вкладки и проверить, запущено ли мое приложение (или есть ли лучший способ сделать это)?
  • Если это последняя вкладка, либо загрузите новую эпоху, которая является страницей выхода из моего приложения, затем закройте ее (ожидая, пока она полностью откроется? Или просто отправьте HTTP-запрос и подождите 200 OK), или, возможно, какой-нибудь Ajax ?

Я надеюсь, что кто-то пожалеет о плохом JS n00b и укажет мне правильное направление.

Спасибо


Обновление: нет решений на основе таймера, пожалуйста. У меня есть один на месте, но один пользователь установил время ожидания 999999 нинутов и количество одновременных пользователей равным 1, затем закрыл свой браузер и заблокировал себя


Обновление: кажется, что те, кто здесь знают, говорят, что это не может быть сделано в JS, и Google предлагает мне, что не поддерживается в DOM.

Но как насчет другого пути? Думайте сбоку, ребята. Могу ли я отправить файл cookie, когда пользователь открывает новую вкладку со страницей из моего приложения? А потом удалить куки, когда пользователь захочет закрыть вкладку? И проверить, удаляю ли я последние файлы cookie, и сообщить серверу, чтобы они воспринимались как выход из системы?

Если не куки, есть ли другой способ? (Используйте Ajax при открытии и закрытии страницы, и сервер может решить, закрылась ли последняя вкладка?)

Ответы [ 3 ]

3 голосов
/ 16 октября 2011

Просто тайм-аут сеанса на стороне сервера, если в течение последних 'x' секунд / минут не было выполнено ни одного запроса.

Выполнение этого через JS может быть столь же простым, как отправка периодического запроса «сердцебиение» обратно на сервер один раз каждые 5 секунд, что прекращается при закрытии вкладки. Затем, если ваш таймаут выхода из системы составляет 5 минут, то если он не получит сердцебиение в течение 5 минут, вы можете быть настолько уверены, насколько это возможно, что клиент ушел.

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

1 голос
/ 16 октября 2011

Нет определенного способа сделать то, что вы просите, на самом деле об этом уже было сказано здесь:

JavaScript обнаруживает браузер, закрывает вкладку / закрывает браузер

Используйте тайм-аут сеанса, как предложено в первом комментарии.

1 голос
/ 16 октября 2011
  1. Вы можете добавить некоторый код, который выполняется при закрытии страницы в onbeforeunload.Браузеры могут прервать ваш код, однако, если это займет слишком много времени.
  2. Нет, вы не можете перебирать вкладки;это будет дыра в безопасности.
  3. Нет;поскольку вы не можете перебирать вкладки, вы также не можете получить их URL.
  4. Вы не можете определить, является ли это последней вкладкой с открытой страницей, но если бы вы могли, браузер, скорее всего, заблокировал бы открытие окна при закрытии вкладки.,Однако синхронный AJAX-запрос может работать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...