2016-10-31 6 views
1

Я хочу отслеживать, сколько секунд пользователь тратит на моем веб-сайте проекта на всех своих страницах, и для этого я хочу использовать cookie сеансов JavaScript.
Это потому, что я буду размещать его с помощью Github Pages, где у меня нет доступа к PHP, а также потому, что я хочу попробовать работать с кукисами JS (это первый раз, когда я это делаю).
Для подсчета секунд я использую следующее:Как сохранить переменную внутри cookie сеанса JavaScript?

var time_spent = 0; 
setInterval(function(){ 
    ++time_spent; 
    $('#counter_container span').html(time_spent); 
}, 1000); 

Приведенный выше код работает там, где счетчик, но, как ожидается, будет переустановку каждый раз, когда я изменить страницу.
Я попытался с помощью библиотеки JS-куков (https://github.com/js-cookie/js-cookie) следующим образом:

Cookies.set('time_spent', time_spent); 
var counted_time = Cookies.get('time_spent'); 
console.log(counted_time); 

Но переменная counted_time всегда «неопределенный» все, что я пробовал.
Я бы действительно оценил любые рекомендации, которые я могу получить, чтобы решить эту небольшую проблему.

+0

FYI: SetTimeout не хороший способ для отслеживания времени. И почему это не работает, где вы устанавливаете cookie при обновлении значения? – epascarello

+3

Я бы не использовал таймер для этого. Вместо этого попробуйте установить временную метку, когда пользователь входит на страницу, а затем «onbeforeunload» получает продолжительность и добавляет ее к значению, хранящемуся в файле cookie. –

+0

Возможный дубликат [Установить файл cookie и получить файл cookie с JavaScript] (http: // stackoverflow. com/questions/14573223/set-cookie-and-get-cookie-with-javascript) –

ответ

2

Я бы не использовал таймер для этого. Вместо этого попробуйте установить временную метку, когда пользователь входит на страницу, а затем onbeforeunload получите продолжительность и добавьте ее к значению, хранящемуся в файле cookie. Что-то вроде этого:

var load = new Date(); 

window.onbeforeunload = function() { 
    var leave = new Date(); 
    var duration = leave.getTime() - load.getTime()/1000; 
    var counted_time = parseFloat(Cookies.get('time_spent')) || 0; 
    Cookies.set('time_spent', counted_time + duration); 
} 

Working example

+0

Благодарим вас за ответ и особенно за рабочий пример. Я был в состоянии сделать то, что у меня было в мин с вашей помощью, а также узнать некоторые новые вещи на этом пути. – MariusNV

Смежные вопросы