Intereting Posts
Разработка базы данных MySql для программы викторины Запуск PHP-скрипта с помощью crontab Изменение относительных путей ссылок для включенного содержимого в PHP Мне нужно написать URL-адрес, который равен 301'd для переменной сеанса Строка извлечения регулярных выражений между двумя фигурными фигурными скобками Как структурировать файлы PHP? Использование strstr внутри коммутатора php Как сохранить постоянный скрипт PHP? Нужна помощь … как добавить md5 в поле пароля в php? В Google API v2, почему возникает ошибка: «Идентификатор проекта, используемый для вызова API разработчика Google Play, не был связан»? Используя PHP с TCPDF для извлечения данных (используя mysql) из базы данных и показывая их как .pdf-файл Загрузить файл с помощью AJAX в CodeIgniter. Выполняется даже при значении null / undefined Отображение php vcard в виде обычного текста WAMPSERVER – обновлять версию PHP только с 5.4.3 до 5.5.4 Как выполнить PHP-код из командной строки?

Обнаружение, если два окна браузера открыты для одного и того же сайта

Я пытаюсь обнаружить, если пользователь открывает мой сайт на одной вкладке, а затем открывает его на другой вкладке. Затем это должно показать предупреждение пользователю на вновь открытой вкладке.

Прямо сейчас я отправляю вызов «держать в живых» ajax каждую секунду обратно на сервер. Затем он регистрирует «последнее активное» время в базе данных с уникальным идентификатором. Когда загружается новая страница, она проверяет, был ли этот пользователь (идентифицированный идентификатором пользователя) активным в течение последних 2 секунд.

Это кажется очень неэффективным. Он также не работает хорошо, когда пользователь обновляет страницу. (который занимает менее 2 секунд). Я сделал 2-секундную проверку дольше, чем вызов keepalive, чтобы обеспечить более медленные соединения.

Q) Я иду об этом правильно, или есть более простой способ сделать это? Я слышал, что Gmail и Facebook могут что-то делать, но я не могу найти функцию сайта, в которой они это делают.

Фактический код использует множество внутренних функций, поэтому вот общая идея:

Псевдокод:

Page load; [index] PHP: Save tabsessionid, userid, datecreated, lastactive, phpsessionid into database; [index] JS: Every second, send tabsessionid to keepalive.php [keepalive] PHP: Check if another session exists in the last 2 seconds [keepalive] PHP: If exists -> Return "-1"; else -> return "1"; [keepalive] PHP: Update tabsessionid's last active time. 

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