Ich habe folgendes vor:
Die Onlinezeit, die ein Mitglied auf einer Seite ist, soll in die Datenbank gespeichert werden. Sobald das Mitglied auf der Seite ist und etwas tut, dann wird diese Zeit (seit dem das Mitglied schon auf der Seite ist) zu der alten History dazu gezählt und aktualisiert.
Ich habe dies bisher so gelöst:
Bei erfolgreichem Login werden dem Mitglied vorher 3 Sessions registriert:
$_SESSION['user_id'] -> Die ID des Mitglieds
$_SESSION['user_onlinezeit'] -> Der aktuelle Zeitstempel minus (-) der Onlinezeit-History
$_SESSION['user_zeit'] -> Der aktuele Zeitstempel
Nun wird die Funktion ausgeführt:
function onlinezeit()
{
require('variables.inc.php');
$user_time = time();
if(isset($_SESSION['user_id']) and isset($_SESSION['user_onlinezeit']))
{
$sessionzeit = $user_time - $_SESSION['user_zeit'];
if($sessionzeit > 300)
{
$_SESSION['user_zeit'] = $user_time;
}
else
{
$onlinezeit = $user_time - $_SESSION['user_onlinezeit'];
mysql_query("UPDATE ".$mysql_prefix."_mitglieder SET onlinezeit = '$onlinezeit' WHERE id = '".$_SESSION['user_id']."' AND onlinestatus = '1'");
}
$onlinezeit_result = mysql_query("SELECT onlinezeit FROM ".$mysql_prefix."_mitglieder WHERE id = '".$_SESSION['user_id']."' AND onlinestatus = '1'");
return mysql_result($onlinezeit_result,0);
}
else return false;
}
(Aufbau hier leider sehr unübersichtlich)
So, das klappt eigentlich auch alles wunderbar, nur gibt es da ein kleines Problem.
Und zwar wird die Onlinezeit immer aktualisiert, auch wenn man stundenlang nichts auf der Seite gemacht hat.
Beispiel: Ich gehe auf die Seite und logge mich, gehe dann 1 Stunde vom PC und mache danach wieder was auf die Seite und es wird eine ganze Stunde zur gesamten Onlinezeit addiert. Das ist nicht Sinn der Sache, deswegen wollte ich das mit der Session 'user_zeit' regeln.
Wenn die aktuelle Zeit minus (-) dieser Session größer ist als 300 (wenn ich also seit 300 Sekunden (5 Minuten) eigneloggt bin), dann soll die Session neu geschrieben werden.
Ist dies nicht der Fall (kleiner als 300), dann wird die Onlinezeit in der Datenbank aktualisiert.
(Das könnt ihr euch oben in der Funktion ansehen).
Nur funktioniert das Ganze jetzt nicht, ich habe das Problem noch nicht gelöst und denke mir aber, dass es an der Session 'user_zeit' liegt.
Die Rechnung mit if($sessionzeit > 300) funktioniert auch, wenn ich hier nichts tue, dann wird auch später nichts aktualisiert, aber das nie wieder, auch wenn man nach 300 Sekunden wieder etwas tut, und das bringt auch nichts. Deswegen wird hier die Session neu registriert, aber der Fall für das else dürfte ja dann nicht geschehen und das ist mein großes Problem, denn hier komme ich nicht weiter.
Obwohl er die Datensätze nicht eintragen darf, macht er es trotzdem, es muss also an der Session liegen.
Aber woran genau, da reicht mein Wissen mit Sessions wohl noch nicht aus. Vielleicht wird es gleich nochmals neu überprüft wenn sie erneut registriert wird oder so.
Wäre nett, wenn mir da jemand weiterhelfen könnte und den Fehler beseitigen kann ;-)
Danke schon mal im Voraus!