У меня есть желание обнаружить, когда пользователь покидает мой сайт, чтобы точно записывать длину сеанса пользователя. Я подумал о нескольких возможных решениях для этого:
Сначала я подумал, что могу использовать onbeforeunload и отправить простой ajax для записи последнего действия, но то, что показала мне практика, заключается в том, что onbeforeunload ненадежна на данный момент, и это плохая идея использовать его, поскольку это не перекрестный браузер.
Затем я подумал, что могу использовать файлы cookie для записи длины сеанса пользователя, соответственно увеличивая значение cookie каждый раз, когда пользователь показывал активность. Проблема здесь в том, что я не могу определить, кто будет последним действием пользователя, и единственный возможный способ, которым я могу безопасно вставить длину сеанса и знаю, что это точно, когда пользователь не зашел в систему в течение довольно долгого времени, и значение cookie будет последняя длина сеанса. Это не подходит для меня, потому что многие пользователи могут просто открыть сайт один раз и никогда больше не посещать его (например), тогда ни один из этих пользователей не будет записан.
У кого-нибудь есть решение этой проблемы? Кажется, я искал, но ни один из ответов, которые я нашел, не удовлетворял.
Заранее спасибо!
Вы можете опросить, используя Javascript. Например, если у вас есть тикер или скроллер изображений, который загружает новую информацию с помощью Ajax, вы можете использовать время этих запросов для угадывания последнего действия. Вы также можете делать специальные запросы для него, но для посетителя это пустая трата пропускной способности, и им может не понравиться идея такого строгого мониторинга.
Вы также можете измерять время между просмотрами страниц и оставлять окно последней страницы (выходную страницу) вне поля.
Вы не можете сказать, когда пользователь покидает ваш сайт, это принципиально неподдерживается базовой технологией Интернета. Все, что вы можете сделать, это указать время последнего запроса, сделанного до истечения срока действия сеанса.
Если вам нужно сделать это для конкретных пользователей, лучше всего сделать запрос Ajax, скажем, каждые 60 секунд, и записать временную метку в отношении своей сессии в вашей базе данных. Когда вы измеряете ответы, вы можете классифицировать что-либо, кроме разумного отсечения, как «слева» (например, 20 минут для типичного сеанса браузера).
Если вам не нужны эти данные для отдельных пользователей и просто требуется средний показатель для ваших посетителей, вы можете просто использовать Google Analytics.
Хорошо, судя по данным ответам, чтобы уменьшить минимальные затраты на пропускную способность, вот что я решил сделать:
if('onbeforeunload' in window){ window.onbeforeunload = function(){ Send last activity ajax call } }else{ setInterval(Send activity update, 30000); }
Спасибо за ваши ответы!