Я пытаюсь обнаружить, если пользователь открывает мой сайт на одной вкладке, а затем открывает его на другой вкладке. Затем это должно показать предупреждение пользователю на вновь открытой вкладке.
Прямо сейчас я отправляю вызов ajax "keep alive" каждую секунду на сервер. Затем он регистрирует "последнее активное" время в базе данных с уникальным идентификатором. Когда загружается новая страница, он проверяет, был ли этот пользователь (идентифицированный идентификатором пользователя) активным в течение последних 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 last active time.
Я пробовал некоторые из решений здесь, но предупреждение о более новой вкладке, а не более старая, кажется, является сложной частью с точки зрения сохранения латентности/времени.