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

Automatischer Logout in PHP

Status
Für weitere Antworten geschlossen.

Ritschie

Neues Mitglied
Hi zusammen.

Ich hab mir hier ein kleines Script zusammen gebastelt, wodurch sich User auf meiner HP erst Regestrieren müssen um die Seite zu sehen.
Das klappt wunderbar der User Regestriert sich die DB (MySQL) speichert die Userdaten und das Loginskript vergleicht diese Daten.

Jetzt wird es jedoch (aus meiner Sicht gesehen) etwas komplizierter.

Durch den Login wird in einer Seperaten Spalte in der DP (in meinem Fall "UserSession") eine session ID in die DB geschrieben diese wird auf den weiteren Seiten abgefragt. Sollte die ID "null" sein leiten alle Seiten den User zurück auf die Login seite. Ist die Session jedoch gespeichert so kann der User die Seite sehen.

Noch ist alles gut^^

Jedoch habe ich das Problem das sich manche User einfach vergessen auszuloggen^^
Deswegen würde ich gerne ein Skript gestalten welches zB. alle 30 min selbständig läuft und die Sessions der User beendet.
(wenn möglich auch Userbezogen, sprich der user xxx hat sich um 20:00 eingeloggt also wird er um 20:30 ausgeloggt und muss sich sollte er überhaupt noch da sein erneut einloggen. Um 20:20 hat sich jedoch auch der User yyy angemelset er sollte jedoch nicht schon um 20:30 raus geschmissen werden sondern ebenfalls erst nach 30 minuten also um 20:50)
Da ich nicht viel Ahnung davon habe wie das andere Websites machen frage ich euch einmal^^

der Code mit welchem die Session ID in die DB geschrieben wird lautet:

PHP:
function login($userid)
{
    $sql="UPDATE users
    SET UserSession='".session_id()."'
    WHERE UserId=".$userid;
     mysql_query($sql);
}

grüsse Richard
 
Hallo
also du könntest vielleicht bei jedem Laden einer Seite(wenn man eingeloggt ist) zusätzlich die Uhrzeit speichern. Beim Laden einer Seite mit der Sessionid muss dann überprüft werden, ob die Uhrzeit weniger als z. B. 35 Minuten alt ist. Ist sie vor mehr als 35 Minuten gespeichert worden ist die Sessionid ungültig gespeichert und muss gelöscht werden und das Laden der seite wird unterbrochen. Allerdings müssen sich alle Seite z. B. alle 30 Minuten neu laden (meta-refresh). Ich hoffe meine Idee hilft dir weiter.:wink:
mfg Bleistift
 
Die idee ist gut jedoch was passiert wenn die Seite einfach geschlossen wird??

dann ist doch die session trotzdem weiter gespeichert....
bzw wird erst beim nächsten besuch des Users gelöscht...

aber der ansatz is nicht schlecht danke^^
 
dann ist doch die session trotzdem weiter gespeichert....
bzw wird erst beim nächsten besuch des Users gelöscht...
stört dich das?
@freak131: Wenn man mehr als 35 Minuten auf der Seite bleiben würde, wäre die Session ungültig und man müsste sich neu einloggen.
mfg Bleistift
 
Außerdem wird ja die Zeit überprüft und die ID ist mehr als 35 Minuten nach dem letzten Gebrauch nicht mehr gültig.
 
Hey Ritschi,

hast Du denn eine Session-Klasse gebaut oder wie machst Du das momentan?

Wenn Du das noch nicht hast, solltest Du Dir die Funktion

PHP:
session_set_save_handler

mal ansehen. Die kann die einzelenen Funktionen Deiner Klasse ansprechen, sodass das komplette Session-Handling darüber gemacht werden kann (so kann man auch ein Datenbank-Session-Handling realisieren).

Hierbei gibt es auch eine Clean-Funktion, die alle Datensätze aus der DB löscht, die über die erlaubte Zeit hinweg sind (maxlifetime). Diese Funktion wird zufällig aufgerufen, nicht bei jedem Benutzen der Session-Klasse. Allerdings kannst Du per
Code:
gc_probability /  gc_divisor
den Zufall beeinflussen. Such mal bei Google nach "Session PHP MySQL" oder so, da wirst Du einiges finden.

Viel Spaß dabei!
Stephan
 
Zuletzt bearbeitet:
In bestimmten Szenarien ist das gar keine so üble Idee, ich gebe Dir aber Recht, es gibt bessere Varianten. Kommt eben ganz auf die Umgebung an und wie groß die Anwendung wird.
 
Nun ja momentan mach ich es so:

PHP:
if (isset($_POST['login']))
{
    $userid=check_user($_POST['username'], $_POST['userpass']);
    if ($userid!=false)
        login($userid);
    else
        echo 'Ihre Anmeldedaten waren nicht korrekt!';
}

hier gehts weiter^^
PHP:
function check_user($name, $pass)
{
    $sql="SELECT UserId
    FROM users
    WHERE UserName='".$name."' AND UserPass=MD5('".$pass."')
    LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $user=mysql_fetch_assoc($result);
        return $user['UserId'];
    }
    else
        return false;
}

function login($userid)
{
    $sql="UPDATE users
    SET UserSession='".session_id()."'
    WHERE UserId=".$userid;
     mysql_query($sql);
}

hab diesen teil aus einem tut und hab es deswegen genommen weil in diesem fall die session in einem coocie gespeichert wird anstatt mit jeder seite sichtbar mitgeschickt zu werden

solltet ihr jedoch vorschläge haben wie ich das besser machen kann immer her damitt^^

grüsse richard
 
Status
Für weitere Antworten geschlossen.

Neueste Beiträge

Zurück
Oben