• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Session Cookie Lifetime

Gykonik

Mitglied
Hey Leute, ich habe mal eine Frage zu der Session Cookie Lifetime (session_set_cookie_params)
Unzwar habe ich ein Skript geschrieben, was gucken soll ob der User länger als 6 Stunden lang online war und wenn das der Fall ist soll es den User abmelden, das sieht folgendermaßen aus:

PHP:
function testTimeout() {
        global $session_user_id;
        $AlleUsers = allOnlineUsers();
        if (empty($AlleUsers) === false) {
            foreach($AlleUsers as $user_extract) {
                $user_id = $user_extract['user_id'];
                $LastSeen = mysql_result(mysql_query("SELECT `lastSeen` FROM `users` WHERE `user_id` = $user_id"), 0, 'lastSeen');
                $lastSeenDate = strtotime($LastSeen);   
                $DateNow = time() - (3*60*60);
                if ($lastSeenDate <= $DateNow) {
                    if ($user_id == $session_user_id) {
                        offline($session_user_id);
                        lastSeen($session_user_id);
                        session_destroy();
                        echo "<meta http-equiv='refresh' content='0; URL=index.php?section=Startseite&mode=Inactive'>";
                    } else {
                        offline($user_id);
                        lastSeen($user_id);
                    }
                }
            }
        }
    }

Kommen wir nun zu meiner Frage...
Es passiert leider ziemlich oft, dass der User schon nach einer Stunde oder noch schneller ausgeloggt ist und ich weiß nicht wieso, bzw. woran es liegen könnte...

Hilfe wäre Nett ^^
 
Werbung:
Ähm, was?

PHP:
 global $session_user_id;
AUA! Globals sind keine gute Idee

ob der User länger als 6 Stunden lang online war
Warum dann
PHP:
 $AlleUsers = allOnlineUsers();
wenn es nur um einen geht?

PHP:
$LastSeen = mysql_result(mysql_query("SELECT `lastSeen` FROM `users` WHERE `user_id` = $user_id"), 0, 'lastSeen');
So ein Konstrukt sollte man vermeiden, ist unübersichtlich und erschwert die Fehlersuche
Außerdem ist die MySQL-Erweiterung veraltet, nutze MySQLi oder PDO

PHP:
$DateNow = time() - (3*60*60);
Du redest von 6 Stunden, rechnest aber nur mit 3

Mein Tipp: Script vernichten und nochmal neu schreiben
 
Werbung:
Also ohne nun auf dein Script genau einzugehen, bist du denn sicher, dass der Benutzer von deinem Script durch das session_destroy() zu früh ausgeloggt wird. Wenn ja, dann würde ich einfach die Events aus dem Script in eine Datei protokollieren und mir die entsprechenden Daten wie $lastSeenDate, $DateNow, ... wegschreiben. Dann siehst ja, wann was und warum passiert.
 
Ich glaube, wie @btd600 schon gesagt hat, hat es mehr Sinn dieses Skript komplett neu zu schreiben.

Da ich keine Ahnung habe, wonach man da googlen soll oder so wende ich mich hier dran. Hat jemand Links oder direkte Voschläge, wie man sowas am besten und sichersten Angehen kann?

Mein Plan ist es 1. zu prüfen, ob der Nutzen online ist (keine Ahnung wie die das hier z.b. gemacht haben...) und 2. zu prüfen, ob er seit 6 Stunden eingeloggt ist und ihn dann ausloggen...
 
Mein Plan ist es 1. zu prüfen, ob der Nutzen online ist (keine Ahnung wie die das hier z.b. gemacht haben...)
Da fängt das schon an, eine wirklich sichere Methode gibt es dafür nicht. Auch in diesem Forum sind das nur Mutmaßungen und keine sicheren Aussagen.

und 2. zu prüfen, ob er seit 6 Stunden eingeloggt ist und ihn dann ausloggen...
Es kann kann ja sein, dass ich vor 4 Stunden auf deiner Seite war, dann drei Stunden nicht und jetzt wieder, wie willst du dabei vorgehen? Wenn der User sich nicht ausloggt, bekommst du das garnicht mit.
 
Werbung:
Da fängt das schon an, eine wirklich sichere Methode gibt es dafür nicht. Auch in diesem Forum sind das nur Mutmaßungen und keine sicheren Aussagen.
Weißt du denn, wie es hier gemacht wird? oder irgendeinen Ansatz?


Es kann kann ja sein, dass ich vor 4 Stunden auf deiner Seite war, dann drei Stunden nicht und jetzt wieder, wie willst du dabei vorgehen? Wenn der User sich nicht ausloggt, bekommst du das garnicht mit.
Ja genau da sind halt meine Probleme @bdt600, am Liebsten ist es mir einfach, dass wenn ein User irgendwie z.B. 3 Stunden lang nicht aktiv war, dass er dann ausgeloggt wird...
Nun habe ich keine Ahnung wie das gehen soll, zumal da ja deine angesprochenen Probleme dazu kommen, die mir auch schon in den Sinn bekommen sind...
 
Mit Sessions kommst du da nicht weit, da eine Session nach einer serverseitig vorbestimmten Zeit als Datenmüll eingestuft wird. Halbwegs brauchbar bekommst du das nur mir Cookies hin.

Bei jedem Klick eines User setzt du einen Keks mit dem aktuellen Timestamp und speicherst diesen gleichzeitig in einer Datanbank ab. Wenn der User 3 Stunden nicht aktiv war, wird der Keks ungültig und er muss sich wieder einloggen. Weiterhin baust du in jeder Seite einen Teil ein, der alle User aus der Tabelle rauswirft, deren letzter Timestamp als 3 Stunden alt ist.
 
Werbung:
Ja, dass das die deutsche Übersetzung ist hätte ich mir jetzt fast gedacht... :D

Ich habe noch eine Frage dazu, wenn ich Kekse verwende...
Wie muss ich das kentlich machen, so ne Anzeige schreiben mit "Diese Website verwendet Kekse, Akzeptiers" und dazu noch in den Datenschutz?

Oder wie muss man das kenntlich machen?

EDIT:
Und bei dem "Online-System" muss ich mit Ajax arbeiten, oder? Wegen einer onclick-function?
 
Werbung:
Und was ist mit dem obigen Edit? :p

Und wo genau ist programmiertechnisch der Unterschied zwischen "angemeldet bleiben" und "erinner dich an mich"?
 
Nein, du brauchst kein Ajax und wozu onclick? Oder hast du ein OnePage-Webseite?
 
Werbung:
Bei jedem Klick eines User setzt du einen Keks mit dem aktuellen Timestamp und speicherst diesen gleichzeitig in einer Datanbank ab. Wenn der User 3 Stunden nicht aktiv war, wird der Keks ungültig und er muss sich wieder einloggen. Weiterhin baust du in jeder Seite einen Teil ein, der alle User aus der Tabelle rauswirft, deren letzter Timestamp als 3 Stunden alt ist.
Deswegen dachte ich onclick
 
Werbung:
Ist denn nicht Onclick oder Onmousemove oder so besser?
Was ist denn bei einem Chat oder so? Da wird ja die Seite nicht neu geladen...

Meine Idee war es einfach, das Script dann in die index.php-Datei zu inkludieren, die bei jeder Seite aufgerufen wird (außer bei Ajax-Requests, wie bei Chats)
Unsicher bin ich mir deswegen bei den Sachen wie Chats
 
Zurück
Oben