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