2016-10-31 3 views
1

Ich möchte verfolgen, wie viele Sekunden ein Nutzer auf meiner Projektwebsite auf all seinen Seiten verbringt, und dafür möchte ich JavaScript-Sitzungscookies verwenden.
Dies ist, weil ich es mit Github Pages hosten werde, wo ich keinen Zugang zu PHP habe und auch, weil ich versuchen möchte, mit JS-Cookies zu arbeiten (Es ist das erste Mal, dass ich das mache).
Um die Sekunden zähle ich die folgenden bin mit:Wie wird eine Variable in einem JavaScript-Sitzungscookie gespeichert?

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

Der obige Code funktioniert, wo der Zähler wie aber jedesmal, wenn ich die Seite erwartet wird Reseting ändern.
Ich habe versucht, eine js-cookie-Bibliothek (https://github.com/js-cookie/js-cookie) auf die folgende Weise unter Verwendung von:

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

Aber die counted_time Variable wird immer 'undefined', was ich versucht habe.
Ich würde wirklich jede Führung schätzen, die ich bekommen kann, um dieses kleine Problem zu lösen.

+0

FYI: setTimeout ist kein guter Weg, um Zeit zu verfolgen. Und warum funktioniert es nicht? Wo setzen Sie den Cookie, wenn Sie den Wert aktualisieren? – epascarello

+3

Ich würde dafür keinen Timer verwenden. Versuchen Sie stattdessen, einen Zeitstempel zu setzen, wenn der Benutzer die Seite betritt und dann 'onbeforeunload' die Dauer erhält und sie dem im Cookie gespeicherten Wert hinzufügt. –

+0

Mögliches Duplikat von [Cookie setzen und Cookie mit JavaScript erhalten] (http: // stackoverflow. com/questions/14573223/set-cookie-and-get-cookie-mit-javascript) –

Antwort

2

Ich würde keinen Timer dafür verwenden. Versuchen Sie stattdessen, einen Zeitstempel festzulegen, wenn der Benutzer die Seite aufruft, und geben Sie dann onbeforeunload die Dauer ein und fügen Sie sie dem Wert hinzu, der im Cookie gespeichert ist. Etwas wie folgt aus:

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

Vielen Dank für die Antwort und besonders für das Arbeitsbeispiel. Ich konnte mit Eurer Hilfe das machen, was ich in min hatte und lerne unterwegs auch einiges Neues. – MariusNV

Verwandte Themen