Frage von Julian3004, 38

PHP: nach aublauf des cookie ein mysql_query ausführen?

Hallo, ich bin am überlegen wie ich das hinbekomme das nach dem ablaif des Cookie ein Querry ausgeführt wird. Warum? Weil ich in meiner Datenbank das Feld von dem Benutzer der Eingeloggt ist von Logged_in = true in Logged_in = false ändern möchte. Ich hoffe ihr könnt mir helfen. Danke

function login(){
        $user   = length(isset($_POST['user']) ? $_POST['user'] : '', 60);
        $passwd = length(isset($_POST['password']) ? $_POST['password'] : '', 50);
        $save   = length(isset($_POST['save']) ? $_POST['save'] : '', 1);
        $error  = NULL;
        if(!empty($user) && !empty($passwd)){
            if(dbanz('user', 'username', $user) == 1){
                if(dbout('activ', 'id', dbout('id', 'username', $user, 'user'), 'user') == 1){
                    if(dbout('password', 'username', $user, 'user') == pwsalt($passwd)){
                        $_SESSION['userses'] = dbout('id', 'username', $user, 'user');
                            mysql_query("Update ".DB."_user Set last_login = now() Where id = '".$_SESSION['userses']."'")or die (mysql_error());
                        if($save == 1){
                            setcookie('userses1', encodeRand($user), time() + 3600*24*30, '/');
                            setcookie('userses2', pwsalt($passwd), time() + 3600*24*30, '/');
                        }
                        // CSRF Protection
                        $_SESSION['csrfToken'] = uniqid('', true);
    
                        header('Location: ./');
                        exit;
                    } else {
                        $error = 'Benutzername oder Passwort falsch! Bitte versuche es erneut.';
                    }
                } else {
                    $error = 'Dieses Konto ist deaktiviert! Aktiviere ihn oder Kontaktiere einen Administrator.';
                }
            } else {
                $error = 'Benutzername oder Passwort falsch! Bitte versuche es erneut.';
            }
        } else {
            $error = 'Bitte fülle alle Felder aus!';
        }
        return sondertext($error);
    }
    
    function cookielogin(){
        $ses  = length(isset($_SESSION['userses']) ? $_SESSION['userses'] : '', 10);
        $user = decodeRand(length(isset($_COOKIE['userses1']) ? $_COOKIE['userses1'] : '', 200));
        $pass = length(isset($_COOKIE['userses2']) ? $_COOKIE['userses2'] : '', 128);
        if(empty($ses)){
            if(!empty($user) && !empty($pass)){
                if(dbanz('user', 'username', $user) == 1){
                    if(dbout('activ', 'id', dbout('id', 'username', $user, 'user'), 'user') == 1){
                        if(dbout('password', 'username', $user, 'user') == $pass){
                            $_SESSION['userses'] = dbout('id', 'username', $user, 'user');
                            
                            // CSRF Protection
                            $_SESSION['csrfToken'] = uniqid('', true);
                        }
                     }
                }
            }
        }
    }
        
Antwort
von tWeuster, 27

Dein vorgehen würde eine permanente Kommunikation mit dem Server voraussetzen. Und die gibt es nicht.

Deine Überlegung hat ein Denkfehler.

Wenn das Cookie gesetzt ist, dann ist der User eingeloggt. Ist es nicht gesetzt, dann ist der User nicht eingeloggt. Sowas in der Datenbank zu speichern ist quatsch.

Was du jedoch machen könntest. Wenn der User die Seite verlässt, dann gehst du einfach per se davon aus, dass er sich ausgeloggt hat. Sprich du schickt ein letztes Ajax Statement an den Server und setzt das Login auf false. Wenn der User nie wieder auf deine Seite kommt, dann ist der Zustand korrekt. Wechselt er von einer Seite auf eine andere setzt du Login einfach wieder auf true am Anfang der Seite.

Kommentar von Julian3004 ,

Oder was ich mir auch überlegt habe ist das ich alle 10 Sekunden ne Eintragung an die Datenbank
schicke und im Benutzerfenster frag ich ab, ob eine Rückmeldung
schon länger als 10 Sek. zurückligt. Wenn das der Fall ist wird der Benutzer auf false gesetzt. Aber wie mach ich das dass aller paar sekunden z.b. die funktion ausgeführt wird? oder geht das nicht?

Kommentar von Malemeister ,

Dein letzter Vorschlag wäre eine Möglichkeit wie man sowas umsetzt, julian.

Mit Cookie würde ich das nicht lösen, denn Cookies werden Clientseitig gespeichert. Du kannst Serverseitig nicht prüfen ob ein Cookie vorhanden ist oder nicht.

Den Vorschlag von tWeuster würde ich hier auch nicht empfehlen (nicht böse gemeint). Es gibt nur die unterschiedlichsten Methoden wie ein User die Website "verlassen" kann und nicht alle werden entsprechend erkannt.

Zurück zu deinem letzten Vorschlag: Schau dir mal setInterval (JQuery) an.

Keine passende Antwort gefunden?

Fragen Sie die Community