Ankündigung

Einklappen
Keine Ankündigung bisher.

Login-Script mit Session - Probleme nach Logout mit der Browser-History

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Login-Script mit Session - Probleme nach Logout mit der Browser-History

    Hallo Zusammen,

    ich habe mir ein Login-Script unter Verwendung von Session gebaut und es funktioniert soweit auch alles wunderbar. Ich habe lediglich noch ein Problem, das ich trotz Suche im Web nicht lösen konnte.

    Wenn ich mich mit meinem Script auslogge wird meine Session-ID gelöscht. Aber über die Zurück-Funktion des Browser gelange ich wieder in den Login-Bereich ohne neue Anmeldung mit der alten Session-ID.

    Wie kann ich das verhindern?

    Anbei die erforderlichen Code-Schnippsel:

    PHP-Code:
    session_start();

    if (isset($_GET['SLogout']))
    {
        if (!isset($userID))
            $userID = $_SESSION['UID'];

      $_SESSION=array();
      session_regenerate_id();
      session_destroy();
      session_unset();

      // Show Logout-Confirmation Screen
      ?>
      <html>
      <head>
      <title>GOOD BYE !!!</title>
      <!-- Favicon -->
      <link href="favicon.ico" rel="shortcut icon">
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <meta http-equiv="refresh" content="1; URL=./index.php">
      <link rel="stylesheet" href="./style/styleOUT.css" type="text/css">
      </head>
      <body bgcolor="#FFFFFF" topmargin="1" leftmargin="1" rightmargin="1">
      <table border="0" height="100%" width="100%" cellspacing="0" cellpadding="0" valign="center">
        <tr align="center">
          <td>
            <table border="0" cellspacing="0" cellpadding="0">
              <tr height="30" align="center">
                <td class="body_b">Your logout was successful</td>
              </tr>
              <tr height="30" align="center">
                <td class="body_b">You will be redirected in a few seconds...</td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
      </body>
      </html>
      <?php
      
    exit;
    }
    Anmerkung zum besseren Verständnis des Codes:
    Bei jedem Aufruf von index.php starte ich die Session. Wenn der Benutzer das Login-Formular ausfüllt, prüfe ich natürlich die zuerst die Formulardaten auf Richtigkeit und ob es diesen Benutzer überhaupt gibt. Wenn alles OK ist, befindet er sich dann im internen Bereich.
    Wenn er sich ausloggt, wird an die URL die Variable $SLogout angehängt und er wird ausgeloggt. Dabei wird die Session-ID neu generiert.

    Vielen Dank für Eure Hilfe im Voraus...
    Frank


  • #2
    Angenommen Dein Script ist soweit korrekt, kannst du dieses nicht "beheben". Durch klick auf de Zurück-Button des Browsers wird der Inhalt aus dem Cache geladen, und nicht vom Server. Alle Links, die nur eingeloggten Usern vorbehalten sind, sind so zwar sichtbar, aber ohne Funktion

    Kommentar


    • #3
      Du kannst in deinem Script ja sicherlich prüfen, ob ein User eingeloggt ist.

      Wäre dann nicht eine Option den User per Header auf die Login Seite umzuleiten wenn er nicht eingeloggt ist?

      Ich denke dann umgehst du auch den "Browser Cache"
      twitter.com/moveax1 || http://modxcms.com/ || http://ubuntuusers.de/

      $live->free() OR die();

      Kommentar


      • #4
        @mohi:
        Leider ist das nicht so. Wenn die Links nur sichtbar wären, hätte ich damit kein Problem. Aber ich bin wieder vollkommen eingeloggt, als ob ich mich nie ausgeloggt hätte. Außerdem ist meine "alte" Session-ID auch wieder da (prüfe ich im Augenblick durch eine Ausgabe am Bildschirm)

        @moveax1:
        Tja, das mache ich eigentlich auch. Anbei der Code zur Überprüfung, ob ein Benutzer eingeloggt ist:

        PHP-Code:

        if (isset($_SESSION['UID']))
        {
          
        $userID $_SESSION['UID'];
          
        $showtable false;

        Ich speichere die UserID als Session-Variable. Und obwohl ich beim Logout die Variablen lösche, ist die UserID wieder vorhanden, nachdem ich auf den Zurück-Button gedrückt habe. Genau wie die Session-ID. Und damit bin ich auch wieder voll eingeloggt.

        Sonst noch irgendwelche Tipps?

        Kommentar


        • #5
          Machst du bevor ein User eine geschützte Seite betritt auch eine prüfung ob er eingeloggt ist?

          Ich mache das bei mir so.
          PHP-Code:
          if(!logged_in())
          {
               echo 
          'Nicht eingeloggt';
               exit();

          Bei mir prüft die Funktion ob ein User eingeloggt ist. Zusätzlich ahbe ich noch ein Flag was, wenn es auf 0 steht ausgeloggten Zustand beschriebt und wenn es auf 1 steht eingeloggten Zustand beschreibt.

          Wenn du dich ausloggst würde ich noch mit einer header Location auf eine bestimmte Seite weiterleiten oder mit meta refresh.
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            Ja, die Prüfung erfolgt auf jeder internen Seite.
            Wenn sich ein Benutzer anmeldet speichere ich seine UserID als Session-Variable und diese prüfe ich jedesmal ab und vergleiche die mit den Datenbankeinträgen.

            Das mit dem Flag habe ich mir auch schon überlegt, nur sah ich darin bisher immer eine Schwierigkeit. Woher weiß ich, daß sich der Benutzer ausgeloggt hat, wenn er einfach seinen Browser schließt?

            Das mit der Weiterleitung habe ich bei mir im Code schon drin. --> siehe ersten Beitrag von mir.

            Kommentar


            • #7
              Wenn er den Browser schließt und erneut deine Seite besucht bekommt er eine neue Session-Id und die alte ist ungültig

              Kommentar


              • #8
                Zitat von mohi Beitrag anzeigen
                Wenn er den Browser schließt und erneut deine Seite besucht bekommt er eine neue Session-Id und die alte ist ungültig
                ähhmm... Ja, genau. So ist das auch bei mir. Dann sind natürlich auch die Inhalte der Browserhistory weg und mein Problem somit ebenso.

                Bei mir tritt das Problem natürlich nur auf, wenn der Browser geöffnet bleibt.

                Kommentar


                • #9
                  Das war auf die Datenbank bezogen. Weshalb machst du nicht ein Flag in deiner Session-Tabelle welche meinetwegen "uid" für userid heißt. Ist der User eingeloggt schreibst du da die Userid rein, ansonsten 0. Bei jedem Seitenaufruf checkst du dann diesen flag und handelst dementsprechen?!

                  Kommentar


                  • #10
                    Das wäre zwar eine Lösung, aber eigentlich bin ich auf der Suche nach einer richtigen Lösung mit PHP-Mitteln und nicht mit einem Workaround.
                    Die Sessions von PHP stecken ja schließlich nicht mehr in den Kinderschuhen. Außerdem wurden bestimmt schon tausende Logins mit PHP realisiert. Da muß es doch eine ordentliche Lösung geben...

                    Kommentar


                    • #11
                      Zitat von Chitino Beitrag anzeigen
                      Ja, die Prüfung erfolgt auf jeder internen Seite.
                      Wenn sich ein Benutzer anmeldet speichere ich seine UserID als Session-Variable und diese prüfe ich jedesmal ab und vergleiche die mit den Datenbankeinträgen.

                      Das mit dem Flag habe ich mir auch schon überlegt, nur sah ich darin bisher immer eine Schwierigkeit. Woher weiß ich, daß sich der Benutzer ausgeloggt hat, wenn er einfach seinen Browser schließt?

                      Das mit der Weiterleitung habe ich bei mir im Code schon drin. --> siehe ersten Beitrag von mir.
                      So wie ich das verstanden habe sind Sessions auf Browserseite gültig bis der User seinen Browser schliesst.

                      und wenn du eine is_logged_in() Funktion hast, kannst du im negativen Fall den User doch umleiten oder hat das bei dir nicht funktioniert.

                      Ein lebendes Beispiel dafür ist dieses Videotutorial von nettuts:

                      Build a Login and Registration System with XML - NETTUTS
                      twitter.com/moveax1 || http://modxcms.com/ || http://ubuntuusers.de/

                      $live->free() OR die();

                      Kommentar

                      Lädt...
                      X