Logout und Back Button

  • Hi,

    mache meinen Logout so:

    Code
    //ausloggen
    if($action=="logout"){
    session_unset();
    session_destroy();
    session_start()}

    Wenn ich aber nun auf den back Button des Browser klicke bin ich wieder eingelogged... Kann man das irgendwie verhindern? Wollte keine Cookies setzen um das zu lösen.

    Wird durch session_destroy() eigentlich die SessionID komplett gelöscht oder wird bei einem erneuten session_start() die gleiche SessionID verwendet wenn ich den Browser zwischendurch nicht schließe?

    Gruß

    Matthias

  • warum startests du die session nach session_destroy gleich wieder.
    Für einen log out bauchst du nur session_destroy. damit ist die sache erledigt.
    Wenn du nun den Zurückbutton drückst, dann kommst du zwar wieder auf die seite, auf der du vorher warst, aber du kannst keine aktionen durchführen, für die du eine session benötigst.

    EDIT//
    Ausserdem hast du hinter session_start(); das ";" vergessen. Aber du brauchst es sowieso nicht!

    Viele Grüße

    Mir nicht

  • Die Session starte ich deshalb gleich wieder, falls sich derjenige wieder direkt einloggen möchte. Da brauche ich die Session ja wieder.

    Gruß

    Matthias

  • Aber du startest die session doch sowieso beim login oder?
    Wenn er sich nämlich nicht einloggen will, dann hast ne offene session rumfliegen = Sicherheitslücke!

    Viele Grüße

    Mir nicht

  • Hi,

    das mit der Sicherheitslücke war mir nicht bewußt, habe die Session gleich oben auf der indexseite gestartet, ob er einlogged oder nicht. Werde ich ändern!

    Kann mein Problem glaube ich präzisieren. Wenn ich auf den Back Button klicke sendet der browser die Login daten erneut und deshalb kann man sich wieder einloggen - auch Sicherheitslücke!

    Zum Login:
    Speichere die SessionID in der DB und frage dann auf den geschützten Seiten nach der User Id (session Variable). Wenn vorhanden dann gleiche ich die SessionID mit dem gespeicherten Wert in der DB ab.

    Zum Logout.
    Jetzt wird die Session zerstört, die Session Variablen gelöscht und die SessionID aus der DB gelöscht.

    Wenn der browser jetzt die Daten erneut sendet (Back button) habe ich die gleiche SessionID in der DB stehen wie vorher?!

    Kann man da was machen?

    Gruß

    Matthias

  • Du brauchst die nicht in der DB zu speichern.
    Also folgendes:
    Du machst beim login folgendes

    Code
    if (btnLogIn)
    {
      session_start();
      session_register($SessionID, //usw. alle variablen, die überall(!) in   deiner Session zur Verfügung stehen sollen
    }


    Dann weiter unten machst du:

    Code
    $SessionID = session_id();


    Jetzt hast du deine session id in $SessionID gepeichert und da du sie, dank session register überall zur verfügung hast, machst du auf jeder weiteren seite am anfan (und ich meine ganz am Anfang) wieder session_start();
    Dadurch nimmt er die schon gestartete session (aber das weist du ja).
    Also:

    Code
    session_start();
    if session_id() == $SessionID
    {
      .....//dein code usw.
    }
    else //falls die session nicht vorhanden ist also z.b. nicht eingeloggt
    {
      //Fehlermeldung, oder zurückleitung zur login page z.b.
      <meta http-equiv="refresh" content="0 URL=login.php">
    }


    Probiers aus und sag, ob geklappt hat. :D

    EDIT//
    Und wegen sicherheitslücke. Ist nur so, wenn du eine offene session hast, könnte man ja die session id verwenden, um sich unberechtigten zugang zur seite zu verschaffen. Es ist zwar sehr unwahrscheinlich, da es ja für die session normalerweise auch einen timeout geben sollte, aber die möglichkeit besteht!

    Viele Grüße

    Mir nicht

  • hallo

    statt

    Code
    <meta http-equiv="refresh" content="0 URL=login.php">


    wäre

    Code
    header("location: "http://seite");

    zu empfehlen

    wozu session_start() nach dem destroy wieder gestartet wird:
    als ich zum beispiel nutze das, um zum Beispiel die ausgewählte Sprache der Seite beizubehalten

    gruß daniel

  • Hi,

    löse es nun wie folgt:

    Login:

    Logout:

    Code
    if($action=="logout"){
    session_unset();
    session_destroy();
    }


    Beides wird in die index.php included. die IndexSeite sie so aus:


    Es tut wunderbar!

    Zum Ablauf:

    Beim Login wird wird die session gestartet. DB Abfrage (fehlt hier) ob Name und Passwort stimmen. Dann wird die $session =SessionID.

    Beim Logout einfach alle Sessionvariablen löschen und die Session zerstören.

    Auf der Index Seite werden die Variablen definiert. Hatte ich erst auch beim Login, da der Login aber erst aufgerufen wird wenn das Formular abgeschickt wird hatte ich dann die Variablen später nicht mehr definiert. So läuft es jedenfalls.

    Frage: Kann es sein, das wenn die Session automatisch gestartet wird wenn ich SessionVariable definiere?

    Existiert eine SessionID ohne das ich eine Session gestartet habe?

    Gruß

    Matthias