Wie lange bist Du bereits Online?

19.10.2022 19:43 (zuletzt bearbeitet: 19.10.2022 19:44)
#1 Wie lange bist Du bereits Online?
avatar
Mitglied

Habe hier ein Skript, das die Zeit zählt, die man Online ist.
Hier wird die Zeit auch über ein Cookie gespeichert!
Ein Seiten-Reload oder ein Sprung auf eine andere Seite unterbricht nicht die Zeit!
Super!

Aber!

Was nicht funktioniert!
Beim Schließen des TAB's, des Forums oder des Browsers sollte die Onlinezeit neu zählen!
Hier zählt das Skript fleißig weiter, nur ein Löschen des Caches setzt die Onlinezeit zurück!

Frage:
Ist da nur ein Fehler im Skript oder fehlt noch ein Eintrag zur Löschung des Cookies?
Wie werden die Cookies nach einem Logout hier im Forum gelöscht. Kann man hier etwas übernehmen?

Wer hat eine Idee, wer kann weiterhelfen?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
<script>
//Aktivity Feed + Mitgliederliste + Onlineliste: Xobor (v6)
$('#activity_feed .card-header h5:first,#userlist .card-header h5:first').after('<small>Sie sind seit <span class="OnlinezeitWert">00:00</span> Stunden Online</small>');
if (!$('.card-expl').length > 0) {
$('#useronline .card-header h5:first').after('<span style="font-weight:normal;"><small>Sie sind seit <span class="OnlinezeitWert">00:00</span> Stunden Online</small></span>');
};

//Aktivity Feed + Mitgliederliste + Onlineliste: Standard (v1), ProSilver (v2), Gaia (v3), Business (v4)
$('.xFeedContainer strong, .inpage h2, .topiclist dt:first,.page_useronline .boxheader strong,.page_userlist .boxheader strong,#page-body h2,#pagewidth .cat .ntit').append('<br><span style="font-weight:normal;"><small>Sie sind seit <span class="OnlinezeitWert">00:00</span> Stunden Online</small></span>');

//Statistik: Alle Templates
$('#visits_').after('<strong>Onlinezeit</strong>:<br>Sie sind seit <span class="OnlinezeitWert">00:00</span> Stunden online<br><br>');

 
function Zeitberechnung() {
if ($('.OnlinezeitWert').length > 0) {

var cName = 'onlineCookie';
if (document.cookie && getTimeCookie(cName) != '' && getTimeCookie(cName) != 'NaN') {
var CookieAufrufzeit = parseInt(getTimeCookie(cName));
}
else {
var Aufrufzeit = parseInt((new Date()).getTime());

document.cookie = cName+'='+(Aufrufzeit)+';';
var CookieAufrufzeit = Aufrufzeit;
}
var Differenz = parseInt(((new Date()).getTime() - CookieAufrufzeit) / 1000);
var Minuten = Math.floor(Differenz/60);
var Stunden = Math.floor(Minuten/60);

var stime = mknull(Differenz,2);
Minuten = (Minuten%60);
stime = mknull(Stunden,2)+':'+mknull(Minuten,2);

$('.OnlinezeitWert').html(stime);
setTimeout("Zeitberechnung()", 1000);
}
}
function getTimeCookie(c_name) {
if (document.cookie.length>0) {
c_start=document.cookie.indexOf(c_name + '=');
if (c_start!=-1) {
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(';',c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return '';
}
function mknull(zahl, stellen) {
var strlen = zahl.toString().length;
for(var i=strlen; i<stellen; i++){
zahl = '0'+zahl;
}
return zahl;
}

$(function(){
window.onload = Zeitberechnung();
});
</script>
 


Bitte zum Öffnen anklicken!

Schon mal besten Dank im Voraus
Wolfgang

19.10.2022 20:11 (zuletzt bearbeitet: 19.10.2022 20:12)
avatar  Mike48
#2 RE: Wie lange bist Du bereits Online?
avatar
Mitglied

Ich würde das mit sessionstorage statt Cookie machen.
Der sessionstorage wir nach schließen des Browsers gelöscht.

Online ist man, solange man sich nicht abgemeldet hat und den Browser nicht geschlossen hat.
Einen Timer, der anzeigt wie lange man effektiev auf dem Forum aktiv ist, kann es meines Wissens nicht geben wenn man sich nicht jedes mal abmeldet wenn man das Forum verlässt.


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
29.10.2022 12:58 (zuletzt bearbeitet: 29.10.2022 13:25)
avatar  Mike48
#3 RE: Wie lange bist Du bereits Online?
avatar
Mitglied

Ich habe mal ein Code Gerüst mit einem Plugin (obere Leiste Footer) erstellt wie ich mir das Vorstelle.

Zuerst die sessionstorage Variable einlesen.
Dann prüfen ob der User online ist.

1. Wenn die sessionstorage Variable nicht vorhanden ist und der User online ist, dann beginnt die Online-Zeit und wird in der sessionstorage Variablen abgelegt.

2. Wenn die sessionstorage Variable vorhanden ist und der User online ist, dann die Zeit berechen von Jetzt minus der Zeit in der sessionstorage Variablen.

3. Wenn die sessionstorage Variable vorhanden ist und der User offline ist, dann hat der User sich abgemeldet und die sessionstorage Variable wird gelöscht und man ist wieder bei 1.

4. Wenn der Browser geschlossen wird, dann löscht dieser beim schließen die sessionstorage Variable und man ist wieder bei 1.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
{{template==299.start}}
<!--
ist user_id = true, dann ist der User online
und wenn sessionstorage "online_time" vorhanden, dann ist da der Zeitpunkt seit letztem online Beginn drin
dann berechnen Jetzt minus "online_time"
 
ist user_id = false, dann ist der User offline
und wenn sessionstorage "online_time" vorhanden, dann hat der User sich abgemeldet
dann sessionstorage "online_time" loeschen
 
wenn der Browser geschlossen wird, dann wird auch der sessionstore "online_time" automatisch geloescht
 
-->
 
{{template==299.end
 
<script>
var online_time = xobor.plugin("mike48online").sessionstorage.get("online_time");
var ist_online_seit = new Date();
{{user_id==true.start}}
if(online_time) {
// User ist noch online
console.log("User online - online_time vorhanden");
 
/*
* hier den Code einfuegen fuer Berechnung der Online-Zeit
*/
 
}else{
// User beginnt online
console.log("User online - online_time nicht vorhanden");
xobor.plugin("mike48online").sessionstorage.set("online_time",ist_online_seit);
 
}
{{user_id==true.else}}
if(online_time) {
// User war online -> sessionstorage "online_time" loeschen
console.log("User offline - online_time vorhanden");
xobor.plugin("mike48online").sessionstorage.del("online_time");
}else{
// User ist und war nicht online
console.log("User offline - online_time nicht vorhanden");
}
{{user_id==true.end}}
 
</script>
 


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
29.10.2022 14:35
avatar  Mike48
#4 RE: Wie lange bist Du bereits Online?
avatar
Mitglied


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
30.10.2022 09:25
#5 RE: Wie lange bist Du bereits Online?
l2
Mitglied

moin, moin

Zitat von Wolfgang im Beitrag #1
Was nicht funktioniert!Beim Schließen des TAB's, des Forums oder des Browsers sollte die Onlinezeit neu zählen!Hier zählt das Skript fleißig weiter, nur ein Löschen des Caches setzt die Onlinezeit zurück!


... ist Definitionssache, aber wenn ich den Browser schließe, ohne mich hier auszuloggen, werde ich noch ca 15 min als 'online' in der Statistik aufgeführt.

Wenn ich in dieser Frist mit gleichem Browser dieses Forum wieder aufrufe, sieht es für jeden anderen so aus, als wäre ich durchgehend 'online'.

Das gilt sogar, wenn ich mich mit einem anderen Browser auch noch einlogge und damit weiter surfe.





... würde es „Fussball spielen” heissen

vG Bernd‍

 Antworten

 Beitrag melden
Bereits Mitglied?
Jetzt anmelden!
Mitglied werden?
Jetzt registrieren!