Как отследить, закрыл пользователь вкладку или нет?

Рейтинг: 0Ответов: 2Опубликовано: 22.12.2014

Здравствуйте. Интересует возможность отслеживания, закрыл ли пользователь вкладку с сайтом или нет. Я пилю отображение сеансов, т.е. сколько пользователь провел на сайте. В данный момент код высчитывает время, которое прошло от логина через форму входа до выхода по кнопке "выйти", но ведь могут быть и такие случаи, что пользователь просто закрыл вкладку, а при следующем заходе на сайт юзер входит автоматически.

Подкиньте идеи, как такое можно реализовать?

Ответы

▲ 1Принят

Ещё вариант держать на страницу ф-ю, которая будет выполняться перед закрытием/уходом со страницы. Пусть она выполнит быстрый запрос на ваш скрипт, чтобы отметить уход пользователя. Напр. с jQuery:

$(window).bind('beforeunload', function(){
    $.post( "http://site.ru/ajax/goaway.php", {user_id:12345});
});

Upd. спасибо @Get и @KoVadim Минусы этого метода:

  • если сайт открыт в нескольких вкладках, и юзер закрыл лишь одну из нескольких, а другие остались открыты, получится ложное срабатывание – надо обрабатывать такой момент (напр. считать из серии "уходов" в течение 15 минут только последний);
  • любая нестандартная ситуация: браузер завис, комп заснул, интернет пропал и пр. – и сигнал об окончании сессии не поступит. Опять же, можно считать сессии не длинее 15 минут например.

При всей политической некорректности этого метода, его проще реализовать и он жрёт меньше ресурсов, чем регулярные пинги. В ситуациях, когда точность и 100% покрытие визитов не так важно, почему бы и нет? : )

▲ 2

Пишем на javascript функцию, которая через определеные промежутки времени отправляет какой-то запрос на сервер. Как только сервер перестал получать запросы - записываем время прекращения работы с сайтом.