Session Problem

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

  • Session Problem

    Hallo!

    Ich will mit einer Session einen einfachen Passwortschut einrichten und habe folgende Scripte:

    index.php
    PHP-Code:
    <?php
         
    // Daten
         
    $username $_POST['username'];
         
    $password $_POST['password'];

         
    //Richtig?
         
    if (isset($username) and isset($password)) {
             if (
    $username == "Username" and $password == "Password") {
                 
    session_start();
                 
    $_SESSION["Zugang"] = "ok";
                 
    header("Location: geschuetzt.php?" session_name() . "=" session_id());

                 
    $error "<span style=\"color:#00ff00\">Welcome! You will be redirected now.</span>";
             }  else 
    $error "<span style=\"color:#ff0000\">Wrong password or username!</span>";
         } else {
                
    $error "";
         }
    ?>
    geschuetzt.php
    PHP-Code:
    <?php
      session_start
    ();
      if (isset(
    $_SESSION["Zugang"]) &&
          
    $_SESSION["Zugang"] != "ok") {
        
    header("Location: index.php");
      }
    ?>
    Damit soll Folgendes erreicht werden: Auf der index.php gibt der User sein Passwort und Usernamen ein. Falls die stimmen, wird er auf die geschuetzt.php umgeleitet und sie wird ihm angezeigt, falls Zugang auf ok ist. Wenn einer auf die Idee kommt, einfach so auf geschuetzt.php zu gehen, ohne sich eingeloggt zu haben, wird er zur Loginmaske zurückgeschickt.

    Das Problem:
    Das Einloggen und umleiten, funktioniert tadellos, ich lande auf der geschuetzt.php und die Session wird angehängt. Wenn ich jetzt aber einfach so auf home.php gehe, werde ich nciht zur Loginmaske zurückgeschickt, was ich aber eigentlich sollte. Warum? Ich finde den Fehler nicht =/

    Bin dankbar für jede Hilfe.

    Lg,
    Hallo1
    Zuletzt geändert von Hallo1; 09.09.2007, 00:06.

  • #2
    Hier wird wohl auch keiner den Fehler finden, wenn du uns den wesentlichen Code von home.php verschweigst!

    OffTopic:
    Ja ich weiß, es ist schon spät, aber vielleicht sollte man dann doch erstmal schlafen gehen, morgen ist auch noch Wochenende!

    Kommentar


    • #3
      Re: Session Problem

      PHP-Code:
      if (isset($username) and isset($password)) 
      ist Käse. Die Variablen existieren an dieser Stelle immer, denn zwei Zeilen zuvor hast du sie definiert.

      So wird ein Schuh draus:
      PHP-Code:
      <?php
      session_start
      ();

      if (isset(
      $_POST['u']) && isset($_POST['p'])) {
          if (
      $_POST['u'] == 'Uname' && $_POST['p'] == 'Pword') {
              
      $_SESSION['Zugang'] = 'ok';
              
      header('Location: http://example.com/safe.php');
              exit;
          } else {
              
      $error 'Wrong password or username!';
          }
      }
      // Login form ...
      ?>
      PHP-Code:
      <?php
      session_start
      ();
      if (!isset(
      $_SESSION['Zugang']) || $_SESSION['Zugang'] != 'ok') {
          
      header('Location: http://example.com/loginform.php');
          exit;
      }
      ?>
      Das zweite Snippet kannst du in jede Datei includen, die du schützen willst. Muß aber ganz oben sein, es darf keine Ausgabe vorher stattfinden.

      Kommentar


      • #4
        wenn wir grad schon beim Code-Schenken sind, will ich auch noch was verbessern.

        PHP-Code:
        <?php
        session_start
        ();

        if (isset(
        $_POST['u'],$_POST['p']){
            if (
        $_POST['u'] == 'Uname' && $_POST['p'] == 'Pword') {
                
        $_SESSION['zugang'] = true;
                
        header('Location: [url]http://example.com/safe.php[/url]');
                exit;
            } else {
                
        $error 'Wrong password or username!';
            }
        }

        // Login form ...
        ?>



        <?php
        session_start
        ();
        if (!isset(
        $_SESSION['Zugang']) || !$_SESSION['zugang']) {
            
        header('Location: [url]http://example.com/loginform.php[/url]');
            exit;
        }
        ?>
        Wird aber alles nichts an der fehlenden home.php ändern.

        Kommentar


        • #5
          Die home.php ist die eigentliche Seite, die ich schützen wollte. Ich hab das im Code nur geändert, damit es klarer wird. Da hab ich wohl was vergessen xD"

          Ich probier mal schnell aus und schau, ob es funzt ^_^ Danke schonmal! Eine Frage hätte ich dennoch: Warum benutzt ihr HTML bei Header("Location")? oO Sollte da nicht eigentlich nur die URL sein?

          Es leitet wieder ohne Probleme um, nur wenn ich auf die geschuetzt.php (oder home.php ) gehe, ohne Password und Username eingegeben zu haben, dann lande ich nicht wieder bei der Loginform. Gleiche Problem wie vorher also =/ So sieht's im Moment aus: (Das header-Location musste ich ohne HTML angeben, sonst hat der Browser gesagt, das Dokument existiert nicht)

          index.php
          PHP-Code:
          <?php
               session_start
          ();

              if (isset(
          $_POST['username'],$_POST['password'])) {
                   if (
          $_POST['username'] == 'Username' && $_POST['password'] == 'Password') {
                   
          $_SESSION['zugang'] = true;
                   
          header('Location: home.php?' session_name() . '=' session_id());
                   exit;
               } else {
                   
          $error '<span style="color:#ff0000">Wrong password or username!</span>';
               }
             }
          ?>
          home.php
          PHP-Code:
          <?php
               session_start
          ();
               if (!isset(
          $_SESSION['zugang']) || !$_SESSION['zugang']) {
                   
          header('Location: index.php');
                   exit;
               }
          ?>
          EDIT³ (xD): Wie kann man einen "Logout"-Link realisieren? Ich hab keinen blassen Schimmer davon...
          Zuletzt geändert von Hallo1; 09.09.2007, 10:35.

          Kommentar


          • #6
            Eine Frage hätte ich dennoch: Warum benutzt ihr HTML bei Header("Location")? oO Sollte da nicht eigentlich nur die URL sein?
            Das macht nur das Scheiß Forum, siehst du wenn du auf "zitieren" klickst. Wichtig ist aber, dass wir eine komplette URL benutzen.

            Es leitet wieder ohne Probleme um, nur wenn ich auf die geschuetzt.php (oder home.php ) gehe, ohne Password und Username eingegeben zu haben, dann lande ich nicht wieder bei der Loginform.
            mach mal ne Testausgabe print_r von $_SESSION. Sicher, dass du nicht eingeloggt bist?

            Wo sind error_reporting(E_ALL); und so, wie es in unseren Regeln steht. Glaube zwar nicht, dass es was bringt, aber man weiß ja nie.

            EDIT³ (xD): Wie kann man einen "Logout"-Link realisieren? Ich hab keinen blassen Schimmer davon...
            Dann such im Forum. Das Thema ist nicht neu. Und wenn du gar keinen Plan hast, dann gibts hier auch ein fertiges "Usermanagement"

            Kommentar


            • #7
              <?php print_r($_SESSION['zugang']); ?>
              => 1 oO

              Ich hab mich nicht eingeloggt xD

              Kommentar


              • #8
                Vielleicht solltest du zwischendurch mal deinen Browser schließen, oder uns die Stelle zeigen wo du da 1 reinschreibst.
                Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                Kommentar


                • #9

                  Kommentar


                  • #10
                    Der obige PHP Code gibt "1" aus...

                    Kommentar


                    • #11
                      ALLE COOKIES löschen.

                      Wenn das immer noch nichts bringt, überprüfe, warum du eingeloggt wirst!

                      Kommentar


                      • #12
                        Online-Beispiel?

                        Kommentar


                        • #13
                          Ich nehm alles zurück - wusste gar nich das der da true als 1 reinschreibt bzw. ausgibt, sry. Dennoch, browser schließen und wie gesagt cookies löschen.
                          Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                          Kommentar


                          • #14
                            ja, print_r ist da eigentlich nicht so das paradebeispiel. var_dump wäre besser, ist aber oft zu unübersichtlich.

                            Kommentar


                            • #15
                              Irgendwie, klappt es auf einmal oO Danke, warum auch immer xD

                              Jetzt ist mir das Ganze nicht genug, und ich will was Neues. Ich speichere nun User in einer Tabelle ab. (Tabelle: "user", Spalten sind "username" und "password!") Die Loginform soll das Ganze abgleichen, schauen ob User mit entsprechendem Passwort existiert, und wenn ja, dann soll er weiterleiten.

                              Code:
                                    // Connectdaten
                                    ...
                                    // Verbinden
                                    $connectionid = mysqli_connect($host, $user, $pass);
                                    mysqli_select_db($connectionid, $database);
                                    // Verbunden
                              Wie kann ich nun wie oben beschrieben auslesen? Hat jemand nen Link für mich? Suchfu ist bei "MYSQL Daten auslesen" viel zu unübersichtlich, zumindest finde ich nciht das, was ich brauche =/ Hat jemand einen Link oder zeigt's mir?

                              Kommentar

                              Lädt...
                              X