Вообще говоря, невозможно окончательно определить, посетитель все еще «использует» (или даже смотрит) вашу страницу. После того, как браузер загрузил страницу, он больше не контактирует с сервером, поэтому страница может оставаться открытой в течение нескольких секунд или нескольких лет, и сервер не знал бы.
Событие unload
, безусловно, полезный ключ, так как он обычно срабатывает при разгрузке страницы. Однако это не совсем надежно. Существует множество ситуаций, когда он не срабатывает, и еще много чего, даже если он срабатывает, ваш сервер не будет знать об этом.
Например: браузер (или даже операционная система) может выйти из строя или выйти из строя. Посетитель, использующий Wi-Fi, может быть отключен или может переносить свой iPhone в туннель при использовании вашего сайта.
Стандартное обходное решение для этого - что мы все с готовностью признаем, страшно - это позволить тайм-ауту сеанса посетителя. Даже на веб-сайтах с высокими ставками вы обнаружите, что если вы уйдете от своего компьютера в течение четырех минут и вернетесь, вы все равно получите доступ, но если вы уйдете на пять, вы заперты.
Эта настройка, безусловно, находит много ложных срабатываний: случаи, когда посетитель все еще использует вашу страницу, не взаимодействуя с ней, и поэтому неудовлетворен таймаутом. Он также допускает ложные негативы: случаи, когда настоящий посетитель ушел, а вредоносный пользователь переходит в течение периода ожидания.
Единственным важным дополнением к этой схеме, которую мы видели в последнее время, является использование JavaScript для явного входа пользователя в систему после периода ожидания. Опять же, мы видим это на банковских сайтах: слишком долго оставляйте страницу открытой, и когда вы вернетесь, вы увидите экран входа. (Конечно, это тоже зависит от JavaScript, и поэтому все еще ошибочно.)
К сожалению, поскольку HTTP - это протокол без гражданства, мы никогда не сможем точно знать, что происходит в браузере (особенно если JavaScript), поэтому дешевые обходные пути - это все, что мы можем использовать.
Я бы не сказал, что это _impossible_, просто очень сложно. Всегда есть обнаружение движения + Flash + Webcam + + обнаружение лица. –