Michael: Session Login

Hallo Beisammen!

Ich habe ein Problem mit folgendem Tutorial:
http://www.webmaster-resource.de/tricks/php/login-mit-sessions.php

Also den Login usw. hab ich schon gemacht, nur habe ich ein Problem, wenn ich weitere Inhalte schützen will.
Da steht im Tutorial:

"Diese Session-Variable $SESSION_Passwort steht Ihnen auch, nachdem der Benutzer auf eine weitere Seite des geschützten Bereichs gesurft ist, zur Verfügung. Sie können also die weiteren Seiten ganz einfach schützen, in dem Sie deren Inhalt mit dem folgenden Grundgerüst umgeben. Hat sich der Besucher vorher erfolgreich eingeloggt, wird der Inhalt angezeigt, ansonsten die Meldung er solle sich einloggen."

Und weiter unten im Script steht ja dann

if($SESSION_Passwort==$Zugangspasswort)
{
    //Notieren Sie hier den geschützten Inhalt der Seite
}
else

Wenn ich jetzt eine komplette PHP-Seite mit HTML-codes usw. mit dem Grundgerüst umgebe, kommt folgender Error:

Parse error: parse error, unexpected '<' in C:\Dateipfad\geheim.php on line 29

Kann man das irgendwie so machen, dass man diese PHP-Seite trotzdem irgendwie schützen kann (das wenn man den Dateinamen im Browser eingibt, der Satz "Sie sind nicht berechtigt diese Seite anzuschauen!" kommt) ?????

Ich arbeite nämlich gerade an einem Mini-CMS und da muss ich natürlich den Admin-Bereich schützen.

Danke im Voraus,
Michael

  1. Moin!
    wie lautet der code um zeile 29 rum? könnte helfen.
    tschüss ichen

    --
    Selfcode: sh:( fo:| br: n4:& ie:% mo:| mo:| de:] zu:) fl:| ss:| ls:[ js:|
    1. Moin!

      Das ist dann dort, wo der Inhalt der geschützt gewollten Seite beginnt!

      1. Moin!
        es gibt viele gründe für eine solche fehlermeldung:

        • vergessenes ?>
        • vergessenes ; nach einer funktion oder variablen
        • vergessenes } in einer schleife oder if-abfrage
          .
          .

        schau dir den quelltext mal an, ansonsten poste ihn mal
        tschüss ichen

        --
        Selfcode: sh:( fo:| br: n4:& ie:% mo:| mo:| de:] zu:) fl:| ss:| ls:[ js:|
        1. Ja, ich kann den Quelltext ja posten:

          <?php

          session_start();

          ?>

          <html>
          <head>
          <title>miniCMS Adminoberfläche</title>
          </head>
          <body>

          <?php

          $Zugangspasswort = "admin";

          if($SESSION_Passwort==$Zugangspasswort)
          {
           //Notieren Sie hier den geschützten Inhalt der Seite
          //Das ist der Anfang vom Mini-CMS
          <h1>Adminbereich</h1>
          <table>
            <tr>
              <td style="vertical-align:top; padding-right:50px; border-right:1px solid #000099">
                Men&uuml;<br>
                <ul>
                  <li><a href="admin.php?id=home">Home</a></li>
                  <li><a href="admin.php?id=news">News</a></li>
           <li><a href="admin.php?id=links">Links</a></li>
           <li><a href="admin.php?id=kontakt">Kontakt</a></li>
                </ul>
              </td>
              <td style="vertical-align:top;">

          <!-- CONTENT MANAGEMENT ANFANG -->
          <?php
          ##speichern des Pfades zur Inhaltsseite
          switch($_GET['id']){
            case 'news':
              $datei = '../news.html';
            break;
            case 'links':
              $datei = '../links.html';
            break;
            case 'kontakt':
              $datei = '../kontakt.html';
            break;
            default:
              $datei = '../home.html';
          }

          //und so weiter und so fort......

          }
          else
          {
           echo"Sie sind nicht berechtigt die Seite anzuzeigen!<br>Bitte loggen Sie sich vorher <a href="login.php">hier</a> ein.";
          }

          ?>

          </body>
          </html>

          Ja und das geht bei mir nich!

          1. Moin!

            <?php

            session_start();

            ?>

            <html>
            <head>
            <title>miniCMS Adminoberfläche</title>
            </head>
            <body>

            <?php

            $Zugangspasswort = "admin";

            if($SESSION_Passwort==$Zugangspasswort)
            {
             //Notieren Sie hier den geschützten Inhalt der Seite
            //Das ist der Anfang vom Mini-CMS

            ?>

            <h1>Adminbereich</h1>
            <table>
              <tr>
                <td style="vertical-align:top; padding-right:50px; border-right:1px solid #000099">
                  Men&uuml;<br>
                  <ul>
                    <li><a href="admin.php?id=home">Home</a></li>
                    <li><a href="admin.php?id=news">News</a></li>
             <li><a href="admin.php?id=links">Links</a></li>
             <li><a href="admin.php?id=kontakt">Kontakt</a></li>
                  </ul>
                </td>
                <td style="vertical-align:top;">

            <!-- CONTENT MANAGEMENT ANFANG -->
            <?php
            ##speichern des Pfades zur Inhaltsseite
            switch($_GET['id']){
              case 'news':
                $datei = '../news.html';
              break;
              case 'links':
                $datei = '../links.html';
              break;
              case 'kontakt':
                $datei = '../kontakt.html';
              break;
              default:
                $datei = '../home.html';
            }

            //und so weiter und so fort......

            }
            else
            {
             echo"Sie sind nicht berechtigt die Seite anzuzeigen!<br>Bitte loggen Sie sich vorher <a href="login.php">hier</a> ein.";
            }

            ?>

            </body>
            </html>

            du hast da auch ein ?> vergessen (nach //Notieren Sie hier den geschützten Inhalt der Seite //Das ist der Anfang vom Mini-CMS)
            tschüss ichen

            --
            Selfcode: sh:( fo:| br: n4:& ie:% mo:| mo:| de:] zu:) fl:| ss:| ls:[ js:|
          2. Hallo Michael,

            du musst nach dem

            if($SESSION_Passwort==$Zugangspasswort)
            {

            den PHP-Abschnitt mit einem ?> beenden.

            Du vermischt gerade PHP und HTML.

            Schönen Gruß aus München

            die knappschaft

          3. ja, aber dann trenne ich den Code ja mitten zwischen if und else!

            1. Hallo Michael,

              ja, das machst du. Ist aber völlig okay.

              Schönen Gruß aus München

              die knappschaft

              1. Hallo Michael,

                ja, das machst du. Ist aber völlig okay.

                Das funktioniert nicht, es steht zwar dann sie sind nicht berechtigt..., aber auch wenn ich mich einlogge steht das!

                1. Hallo Michael,

                  lass dir doch mal die Variable $SESSION_Paßwort mit einem echo ausgeben. Wenn da nicht admin drin steht, dann solltest du vielleicht auf $_POST['SESSION_Paßwort'] oder $_GET['SESSION_Paßwort'] nehmen, je nachdem, wie du den Wert übergibst...

                  Schönen Gruß aus München

                  die knappschaft

                  1. Hallo, bei mir steht dann gar nichts!

                    vielleicht auf $_POST['SESSION_Paßwort'] oder $_GET['SESSION_Paßwort'] nehmen, je nachdem, wie du den Wert übergibst...

                    wie meinst du das, wohin den wert?

                    Michael

                    1. if($login && $Passwort==$Zugangspasswort)
                      {
                        session_start();
                        session_register("SESSION_Passwort");
                        $SESSION_Passwort=$Passwort;
                      }

                      änderst du in
                      if($_POST['login'] && $_POST['Passwort'] == $Zugangspasswort){
                        session_start();
                        $_SESSION['SESSION_Passwort'] = $_POST['Passwort'];
                      }

                      =============

                      if($SESSION_Passwort==$Zugangspasswort)

                      anderst du in

                      if($_SESSION['SESSION_Passwort'] == $Zugangspasswort)

                      =============

                      dann sollte das auch gehen :)

                      1. wenn der Code Fehlerfrei sein soll, musst du natürlich auch prüfen, ob $_POST[#xxx#] überhaupt vorhanden ist ;)

                        Beispiel:
                        if($_SESSION['SESSION_Passwort'] == $Zugangspasswort)
                        muss dann
                        if(isset($_SESSION['SESSION_Passwort']) && $_SESSION['SESSION_Passwort'] == $Zugangspasswort)
                        lauten

                        ===========

                        if($_POST['login'] && $_POST['Passwort'] == $Zugangspasswort){
                          session_start();
                          $_SESSION['SESSION_Passwort'] = $_POST['Passwort'];
                        }

                        muss dann

                        if(isset($_POST['login']) && isset($_POST['Passwort']) && $_POST['Passwort'] == $Zugangspasswort){
                          session_start();
                          $_SESSION['SESSION_Passwort'] = $_POST['Passwort'];
                        }

                        lauten

                        1. jetzt kenne ich mich überhaupt nicht mehr aus...

                      2. Ich hab es geändert, das passwort stimmt dann nicht mehr!

                        1. hier hab ich mal das Vorgabescript abgeändert....

                          ================================================================================

                          1 <html>
                          2 <head>
                          3 <title>Login</title>
                          4 </head>
                          5 <body>
                          6
                          7 <form action="login-pruefung.php" method="post">
                          8 Geben Sie das Passwort ein:
                          9 <input name="Passwort" size="10" type="password"><br>
                          10 <input name="login" type="submit" value="Login">
                          11 </form>
                          12
                          13 </body>
                          14 </html>

                          ================================================================================

                          1 <?php
                          2
                          3 $Zugangspasswort = "1234";
                          4
                          5 if(isset($_POST['login']) && isset($_POST['Passwort']) && $_POST['Passwort'] == $Zugangspasswort)
                          6 {
                          7     session_start();
                          8     $_SESSION['SESSION_Passwort'] = $_POST['Passwort'];

                          10 }
                          11
                          12 ?>
                          13
                          14 <html>
                          15 <head>
                          16 <title>Passwortgeschützter Bereich</title>
                          17 </head>
                          18 <body>
                          19
                          20 <?php
                          21
                          22 if($_SESSION['SESSION_Passwort'] == $Zugangspasswort)
                          23 {
                          24     echo"Sie sind erfolgreich eingeloggt!<br>Hier gelangen Sie zum <a href="geschuetzter-inhalt.php">geschützten Inhalt</a>.";
                          25 }
                          26 else
                          27 {
                          28     echo"Sie sind nicht berechtigt die Seite zu betreten!";
                          29 }
                          30
                          31 ?>
                          32
                          33 </body>
                          34 </html>

                          ================================================================================

                          1 <?php
                          2
                          3 session_start();
                          4
                          5 ?>
                          6
                          7 <html>
                          8 <head>
                          9 <title>Passwortgeschützter Bereich</title>
                          10 </head>
                          11 <body>
                          12
                          13 <?php
                          14
                          15 $Zugangspasswort = "1234";
                          16
                          17 if($_SESSION['SESSION_Passwort'] == $Zugangspasswort)
                          18 {
                          19     //Notieren Sie hier den geschützten Inhalt der Seite
                          20 }
                          21 else
                          22 {
                          23     echo"Sie sind nicht berechtigt die Seite anzuzeigen!<br>Bitte loggen Sie sich vorher <a href="login.php">hier</a> ein.";
                          24 }
                          25
                          26 ?>
                          27
                          28 </body>
                          29 </html>

                          1. Herzlichen Dank, ich werde jetzt einmal alles ändern!
                            Kann ich dir, wenn ich irgendwas nicht geschafft habe, ein email senden?
                            MfG

                            1. Herzlichen Dank, ich werde jetzt einmal alles ändern!
                              Kann ich dir, wenn ich irgendwas nicht geschafft habe, ein email senden?

                              ja, kannst aber auch hier im Forum schreiben ;)

                              1. Also, hab alles geändert aber jetzt habe ich ein anderes Problem:
                                Wenn ich mich einlogge (ich hab das mit header-weiterleitung in der login-pruefung.php datei gemacht, statt

                                echo"Sie sind erfolgreich eingeloggt!<br>Hier gelangen Sie zum <a href="geschuetzter-inhalt.php">geschützten Inhalt</a>.";
                                aber egal....)

                                Wenn ich mich jetzt eingeloggt habe, kommt die richtige Seite usw. aber es steht: Sie sind nicht berechtigt, diese Seite....

                                Hilfe!!!
                                Langsam werde ich verrückt...

                                MfG

                                1. Sorry, ich hab mich ein wenig verschrieben. Ich hoffe, du hast es aber trotzdem verstanden!

                                  Schau's dir am besten selber mal an, ich habe es schon zum Test auf einen "Probeserver" geladen:

                                  http://miha.funpic.de/miniCMS_lite/admin/index.php

                                  MfG

                                  1. Hallo,

                                    Sorry, ich hab mich ein wenig verschrieben. Ich hoffe, du hast es aber trotzdem verstanden!

                                    Schau's dir am besten selber mal an, ich habe es schon zum Test auf einen "Probeserver" geladen:

                                    http://miha.funpic.de/miniCMS_lite/admin/index.php

                                    das wird daran liegen, weil er die Session verliert ;-)

                                    du musst an deiner URL die Session-ID ranhängen
                                    ich denke mal, dass das Problem dann behoben ist

                                    1. du musst an deiner URL die Session-ID ranhängen
                                      ich denke mal, dass das Problem dann behoben ist

                                      wie?

                                      aber schaus dir jetzt einmal an, ich hatte einen Tippfehler bei einer Variable, jetzt kommt man mit dem Passwort "admin" zwar rein, aber wenn man im Browser admin.php eingibt, kommt man in den geschützten Bereich, ohne das steht "Sie haben keine Berechtigung..."

                                      mfg

                                      1. du musst an deiner URL die Session-ID ranhängen
                                        ich denke mal, dass das Problem dann behoben ist

                                        wie?

                                        if(isset($_POST['login']) && isset($_POST['Passwort']) && $_POST['Passwort'] == $Zugangspasswort){
                                          session_start();
                                          $_SESSION['SESSION_Passwort'] = $_POST['Passwort'];
                                          $url = dirname($p_SERVER['PHP_SELF']).'geschuetzter-inhalt.php?'.session_name().'='.session_id();
                                          header('Location: '.$url);
                                          exit;
                                        }

                                        sieht das bei dir ungefähr so aus?

                                        aber schaus dir jetzt einmal an, ich hatte einen Tippfehler bei einer Variable, jetzt kommt man mit dem Passwort "admin" zwar rein, aber wenn man im Browser admin.php eingibt, kommt man in den geschützten Bereich, ohne das steht "Sie haben keine Berechtigung..."

                                        weil das Passwort in der Session gespeichert ist, die Session hält normalerweise 1800sec.
                                        wenn du innerhalb 1800sec. den Link mit der selben Session ID aufrufst.. wirst du automatisch eingelogt

                                        1. noch was:
                                          warum kann man, nachdem man das Passwort eingegeben hat, nicht mit der Enter-Taste bestätigen (da ist das Passwort dann nämlich falsch)  ????

                                          Man muss immer auf den Login Button klicken.
                                          Ich check das aber nicht, mit Enter muss das ja genauso gehen, oder nicht?

                                          1. Hallo,

                                            noch was:
                                            warum kann man, nachdem man das Passwort eingegeben hat, nicht mit der Enter-Taste bestätigen (da ist das Passwort dann nämlich falsch)  ????

                                            Man muss immer auf den Login Button klicken.
                                            Ich check das aber nicht, mit Enter muss das ja genauso gehen, oder nicht?

                                            also bei mir (Opera 7.53) funktioniert das moit der <ENTER> Taste

                                            1. also liegt es am browser!

                                              scheiß IE6!!!

                                              aber danke nocheinmal!

                                              1. Hallo,

                                                also liegt es am browser!
                                                scheiß IE6!!!
                                                aber danke nocheinmal!

                                                bei mir das selbe Problem...
                                                frag mich aber nicht, woran das liegt

                                          2. Hallo Michael,

                                            warum kann man, nachdem man das Passwort eingegeben hat, nicht mit der Enter-Taste bestätigen (da ist das Passwort dann nämlich falsch)  ????

                                            isset($_POST['login']) (Zeile 5 der zweiten Datei aus [pref:t=86081&m=508523]) ist nur true wenn das Forumlar über den Submit-Button abgesendet wird (es wird nur das name/value-Paar von dem gedrückten Submit-Button mitgeschickt - und wenn keiner gedrückt wurde, wird eben auch keine Wert mitgeschickt) - lass das isset($_POST['login']) also einfach weg.

                                            Grüße aus Nürnberg
                                            Tobias

                                            --
                                            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                                            1. Hallo Tobias,

                                              warum kann man, nachdem man das Passwort eingegeben hat, nicht mit der Enter-Taste bestätigen (da ist das Passwort dann nämlich falsch)  ????
                                              isset($_POST['login']) (Zeile 5 der zweiten Datei aus [pref:t=86081&m=508523]) ist nur true wenn das Forumlar über den Submit-Button abgesendet wird (es wird nur das name/value-Paar von dem gedrückten Submit-Button mitgeschickt - und wenn keiner gedrückt wurde, wird eben auch keine Wert mitgeschickt) - lass das isset($_POST['login']) also einfach weg.

                                              und warum klappt das mit Opera?

                                              1. Hallo,

                                                isset($_POST['login']) (Zeile 5 der zweiten Datei aus [pref:t=86081&m=508523]) ist nur true wenn das Forumlar über den Submit-Button abgesendet wird [...]
                                                und warum klappt das mit Opera?

                                                weil Opera (und Firefox) das name/value-Paar des ersten Submit-Buttons (im Gegensatz zum IE) mitsenden - ob das erlaubt ist oder nicht, weiß ich aber nicht.

                                                Grüße aus Nürnberg
                                                Tobias

                                                --
                                                Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                                                1. Hallo,

                                                  isset($_POST['login']) (Zeile 5 der zweiten Datei aus [pref:t=86081&m=508523]) ist nur true wenn das Forumlar über den Submit-Button abgesendet wird [...]
                                                  und warum klappt das mit Opera?
                                                  weil Opera (und Firefox) das name/value-Paar des ersten Submit-Buttons (im Gegensatz zum IE) mitsenden - ob das erlaubt ist oder nicht, weiß ich aber nicht.

                                                  ok, dann macht es Sinn

                                                  thx

                                      2. badboy schau es dir bitte nocheinmal an und logg dich ein, ich glaube ich habe das problem!
                                        ich hab eine logout-seite gemacht, auf der ich die Session schließe, eh klar, wenn sie offen ist, kann man immer rein!

                                        http://miha.funpic.de/miniCMS_lite/admin/index.php

                                        Danke für alle deine Tipps,
                                        falls wieder was nicht funktioniert, frag ich dich!
                                        MfG,
                                        Michael

  2. Hallo!

    Ich habe ein Problem mit folgendem Tutorial:
    http://www.webmaster-resource.de/tricks/php/login-mit-sessions.php

    Der Code ist sehr veraltet. Ich würde ihn nicht benutzen.

    Also den Login usw. hab ich schon gemacht, nur habe ich ein Problem, wenn ich weitere Inhalte schützen will.

    Der login wie er da steht ist unwichtig. Du kannst Dich auch per

    http://...geheim.php?SESSION_passwort=12345 Zugang zum internen Bereich verschaffen, ohne dich eingeloggt zu haben. Das ist zwar erstmal nicht sooo schlimm, aber man weiß ja nie was die Leute an solchem Code noch so "verbessern".

    Siehe hierzu: http://de3.php.net/manual/de/security.registerglobals.php

    Egal wie die Einstellungen für register-globals bei Dir sind, ich würde immer so schreiben als seien sie abgeschaltet, denn irgendwann wird das überall abgeschaltet, und dann funktionieren die Scripte die sich darauf verlassen nicht mehr, und nebenbei ist das sicherheitstechnisch sicher kein Nachteil.

    Um Daten in die Session zu schreiben verwende nach session_start()

    $_SESSION['name'] = 'wert';

    oder

    $_SESSION['name'] = $variable;

    Auf diesen Wert kannst Du nach session_start() jederzeit z.B. über

    echo $_SESSION['name'];

    zugreifen. session_register() wird nicht mehr benötigt.

    Für Daten aus Formularen verwende entweder $_GET['name'], oder $_POST['name'] (letzteres wäre bei Deinem Formular richtig), für URL-Parameter (script.php?name=value) verwende $_GET['name'].

    "Diese Session-Variable $SESSION_Passwort steht Ihnen auch, nachdem der Benutzer auf eine weitere Seite des geschützten Bereichs gesurft ist, zur Verfügung. Sie können also die weiteren Seiten ganz einfach schützen, in dem Sie deren Inhalt mit dem folgenden Grundgerüst umgeben. Hat sich der Besucher vorher erfolgreich eingeloggt, wird der Inhalt angezeigt, ansonsten die Meldung er solle sich einloggen."

    Das trifft heute nicht mehr unbedingt zu, daher verwende den $_SESSION Array.

    Wenn ich jetzt eine komplette PHP-Seite mit HTML-codes usw. mit dem Grundgerüst umgebe, kommt folgender Error:

    Parse error: parse error, unexpected '<' in C:\Dateipfad\geheim.php on line 29

    Tja, da hast Du irgendeinen Tippfehler, vielleicht davor irgendwo ein ; oder ein " vergessen, oder ein < an falscher Stelle, oder <?php nicht ganz richtig....

    Kann man das irgendwie so machen, dass man diese PHP-Seite trotzdem irgendwie schützen kann (das wenn man den Dateinamen im Browser eingibt, der Satz "Sie sind nicht berechtigt diese Seite anzuschauen!" kommt)

    Dem Script nach sollte genau dieser Satz kommen. Zumindest wenn Du Deinen Parse-Error behoben hast.

    Ich arbeite nämlich gerade an einem Mini-CMS und da muss ich natürlich den Admin-Bereich schützen.

    kling sinnvoll ;-)

    Du könntest den Schutz auch mit einer .htaccess über mod_auth des Apachen (ich gehe einfach mal davon aus...) realisieren:

    http://aktuell.de.selfhtml.org/artikel/server/htaccess/index.htm
    http://httpd.apache.org/docs-2.0/howto/auth.html

    Grüße
    Andreas

    --
    SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
    1. Hallo Andreas!
      Vielen Dank für dein Posting, ich werde gleich schauen ob ich es jetzt schaffe!
      Leider kenn ich mich in PHP noch nicht so gut aus, sonst hätte ich auch nicht auf das Tutorial zurückgegriffen, aber einmal schauen, was ich schaffe!

      Aber wenn du sagst, dass sei unsicher, welchen Passwortschutz empfiehlst du mir, bei dem ich auch Zugriffe auf Seiten sperren kann und dann dieser Satz kommt (sie haben keine Berechtigung...)?

      MfG,
      Michael

      1. Hallo,

        Aber wenn du sagst, dass sei unsicher, welchen Passwortschutz empfiehlst du mir, bei dem ich auch Zugriffe auf Seiten sperren kann und dann dieser Satz kommt (sie haben keine Berechtigung...)?

        schau mal hier, ob du damit etwas anfangen kannst
        http://tut.php-q.net/login.html

        1. schau mal hier, ob du damit etwas anfangen kannst
          http://tut.php-q.net/login.html

          Danke, aber ich bräuchte was ohne MySQL!

    1. Hallo,

      http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index.htm
      http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index-20030609-01.htm#a5
      http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index-20030624.htm#a5

      Die letzten zwei Links sind doch alte Versionen von derm 1. Link, oder? (zumindest lässt sich das aus den Zahlen im Dateinamen, die vmtl. ein Datum sind, vermuten) - ist das Absicht, dass diese Dateien über die Suche auffindbar sind? [1] listet nämlich unter den Treffern 51 bis 80 drei Versionen des Artikels auf (vom 9., 15. und vom 24.6.2003).

      Grüße aus Nürnberg
      Tobias

      [1] http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=online&lang=on&feld=alle&index_2=on&hits=500

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|