Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Session bei geladener Seite

Einklappen

Neue Werbung 2019

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

  • PHP Session bei geladener Seite

    Hi,
    ich habe ein Problem mit der Session in PHP

    Folgende Situation:
    Ich habe eine index.php in der ich entweder eine Login Seite ausgebe oder den Content falls der Benutzer schon eingeloggt ist.

    In der ersten Zeile steht folgendes:
    PHP-Code:
    if(isset($_SESSION['logedin'])) {
        
    session_start();

    Danach wird dann geprüft ob eine Sessionvariable Gesetzt ist, wenn ja gebe ich den Content aus, anderen falls gebe ich die Login Seite aus.

    Jetzt habe ich das Problem das bei jeder F5-Aktualisierung ein Login erforderlich ist.
    Wenn ich die if-clausel entferne, dann kann ich die Session nicht beenden (nach session_destroy leite ich wieder auf die index.php und komme direkt zum Content ohne Loginaufforderung)

    Wie realisiert ihr das?

  • #2
    Du fragst ob ein Wert in der Session existiert, bevor Du die Session überhaupt startest...

    Kommentar


    • #3
      Angenommen ich starte die session ganz normal in der ersten Zeile entsteht folgendes Szenario:
      Ich klicke "Logout", dann wird eine Funktion aufgerufen

      PHP-Code:
      if(isset($_POST['q'])) {
          if(
      $_POST['q'] == 'logout') {
              
      session_destroy();
          }

      Dadurch müsste ja die sessionvariable "logedin" leer sein (also nicht gesetzt). Wodurch meine index.php ja das Login Script ausgeben müsste. Was aber nicht der Fall ist. Da die Sessionvar "logedin" immer noch gesetzt ist.

      Ich könnte natürlich die Sessionvars alle händisch in der Funktion mit PHP unset() löschen. So wie ich die session_destroy() Beschreibung in der Man verstehe werden ja alle Variablen gelöscht bis auf Globale Session Variablen (was sind Globale Session Variablen?) und Session Cookies.
      Wie lösche ich den alle Session Variablen zuverlässig?

      Kommentar


      • #4
        Wenn Du alle Daten entfernst, ist doch alles chico:
        PHP-Code:
        <?php
        session_start
        ();

        // Nehmen wir mal an, es wurde auf Logout geklickt:
        if ( isset($_GET['logout']) ) {

            
        $_SESSION = array();

        }

        // ...und ab hier gehts ganz normal weiter, denn folgendes wird fehlschlagen:

        if ( isset( $_SESSION['loggedin'] ) ) {

            
        //...
        }
        ...nur mal als schematische Erklärung, ohne groß auf Datenvalidierung usw. einzugehen...

        Kommentar


        • #5
          Dann komme ich wieder zum Content zurück. Hier mal der aufbau der index.php

          PHP-Code:
          <?php
          session_start
          ();
          ?>
          //
          // HTML
          //
          <?php
          if(isset($_POST['username'])) {
              
          //Initalisieren der Session Variablen
          }
          else if(isset(
          $_SESSION['logedin'])) {
              
          //Content ausgeben
          }
          else {
              
          //Login Form ausgeben
          }
          ?>
          Logout:
          PHP-Code:
          if(isset($_POST['q'])) {
              if(
          $_POST['q'] == 'logout') {
                  
          $_SESSION = array();
                         
                   
          //session_destroy();
              
          }

          Kommentar


          • #6
            session_destroy() destroys all of the data associated with the current session. It does not unset any of the global variables associated with the session, or unset the session cookie.
            Grüße.

            Kommentar


            • #7
              Bei Deinem Code-Ausschnitt, wird ja auch gar nichts entfernt. Lies Dir #4 nochmal genau durch und versuche das in Deinen Code zu integrieren, dann passt das...

              Kommentar


              • #8
                Okay hab es kapiert
                Vielen dank

                Dachte mit $_SESSION = array(); kann man die kompletten Sessionvars überschreiben.

                Kommentar


                • #9
                  Zitat von Nagazi Beitrag anzeigen
                  ... Dachte mit $_SESSION = array(); kann man die kompletten Sessionvars überschreiben.
                  Ja .. mit einem leeren array.

                  Kommentar


                  • #10
                    Zitat von hausl Beitrag anzeigen

                    Ja .. mit einem leeren array.
                    Habs jetzt. Zuvor war noch eine Ausgabe, welche die Weiterleitung unterbrochen hat. Deswegen sah es so aus als wäre $_SESSION['logedin'] noch gesetzt.

                    Nur mal zum Verständnis, in welchen Fällen macht der Einsatz von session_destroy() Sinn?

                    Kommentar


                    • #11
                      Wenn Du die Session zerstören willst, die Entscheidung liegt aber bei Dir als Entwickler.
                      Ich destroye Sessions für gewöhnlich immer, wenn ein Logout durchgeführt wird.

                      session_start() generiert dann hinterher nämlich eine neue Session und nimmt nicht die gleiche wieder.

                      Kommentar

                      Lädt...
                      X