Я пытаюсь обнаружить, если пользователь открывает мой сайт на одной вкладке, а затем открывает его на другой вкладке. Затем это должно показать предупреждение пользователю на вновь открытой вкладке.
Прямо сейчас я отправляю вызов «держать в живых» 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.
Я пробовал некоторые из решений здесь, но предупреждал новую вкладку, а не старую, кажется, сложной частью сдерживания задержки / времени.