Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Session

Einklappen

Neue Werbung 2019

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

  • Problem mit Session

    Hallo,
    hab ein kleines Problem mit Sessions. Und zwar habe ich mir einige Schnipsel im Netzt runtergeladen.

    Ich hab es schon hingekriegt dass man sich einlogt, wenn der Benutzername und Passwort stimmt. Allerdings sollte es nicht möglich sein, wenn ich www.meinedomain.de/pfad/einedatei.php im browser eintippe, dass ich auch diese zu sehen bekommen. Bei mir ist das aber leider so

    Also hier der Code den ich auf der login.php habe:

    Code:
    session_start();
    session_register("email");
    Und dann habe ich in jeder Seite (natürlich alles PHP-dateien) immer folgenden Text am Anfang der Dateien:

    Code:
    <?php
    session_start();
    if (!session_is_registered('email'))
    {
    die ("Sie müssen sich einloggen!");
    }
    ?>
    Stimmt doch alles, oder? Leider klappt es nicht bei mir...

    Danke für jede HILFE!!!
    Gruss.

  • #2
    hi

    benutz nicht mehr session_register() das is veraltet

    aktuell ist $_SESSION['']

    dann mach es so:

    login.php:
    PHP-Code:
    <?php
    session_start
    ();
    $_SESSION['online']='true';
    ?>
    und die seite:

    z.b admin.php
    PHP-Code:
    <?php
    session_start
    ();

    if(
    $_SESSION['online']){
    echo 
    'eingellogt';
    }
    else{
    echo 
    'bitte einloggen!!!';
    }
    ?>

    hoffe das hilft :wink:

    stego87

    Kommentar


    • #3
      Hi,
      Danke, funktioniert schon mal ganz gut.

      ABER::::!
      Wenn ich jetzt www.meinedomain.de/pfad/seite.php im browser eintippe erscheint schon richtig "Sie müssen sich einloggen". Allerdings wenn ich mich eingelogt habe und dann auf die seite.php klicke erscheint auch "Sie müssen sich einlogen!". Deswegen befürchte ich, dass überhaupt keine Session gestartet wird.

      Hier noch mal der neue Code:
      Auf der Login.php
      Code:
      <?
      if      ($anmelden) { anmelden($fertig, $email, $passwort1, $passwort2, $mail);}
      else                { login($fertig, $email, $passwort);}
      
      function inhalt($email) 
      {
      session_start(); 
      $_SESSION['email']='true'; 
      ?>
      Und der Code jeder Seite:
      Code:
      <?php
      session_start(); 
      
      if($_SESSION['email'])
      {
      die ("Sie müssen sich einloggen!");
      }
      ?>
      Fehlt vielleicht doch noch etwas?

      Thanx!

      Kommentar


      • #4
        --> wichtig...session_start muss IMMER zuoberst an der seite stehen....also als erster befehl...sonst get das net !!!

        stego87

        Kommentar


        • #5
          Hallo,
          kann es sein, dass der Fehler da liegt:
          Code:
          <?php 
          session_start(); 
          if (!session_is_registered('email')) 
          { 
          die ("Sie müssen sich einloggen!"); 
          } 
          ?>
          Es ist eine Session mit dem Namen Email gestartet, deswegen erscheint auch: "Sie müssen sich einloggen!".
          Stimmt das? Wenn ja, wie formuliere ich es dann so, dass wenn keine Session gestartet ist, "Sie müssen sich einloggen!" erscheint?

          Das allerbeste wäre wenn nicht "Sie müssen sich einloggen!" kommt, sondern die Seite login.php automatisch gerufen wird, wenn jemand versucht eine geschützte Seite zu öffnen.

          Danke für jede Hilfe :wink:

          Kommentar


          • #6
            Hallo "corona".

            Sieht so aus, als hättest du da ein ziemlich veraltetes Skript ausgegraben. Hier ein paar Hinweise:

            1. register_globals

            Dies ist eine PHP-Option, die in der Konfigurationsdatei php.ini eingestellt werden kann. Wenn diese auf "off" steht, was zu empfehlen ist, dann werden Werte, die über ein Formular etc. übergeben wurden nicht automatisch als Variablen registriert. Dein if ($anmelden) scheint darauf zu setzen, dass im Formular ein Input-Feld mit dem Schlüssel anmelden übergeben wird und dann eben gleich als $anmelden zur Verfügung steht. Wenn dem so ist, dann findest du den Wert jetzt unter $_POST['anmelden'], genau, wie alle anderen Werte, die per Formular übergeben wurden.

            2. error_reporting

            Auch das eine PHP-Option. Stell die mal auf E_ALL. Damit bekommst du alle Meldungen von PHP ausgespuckt. So auch Zugriffe auf nicht existierende Arrayfelder. Folglich musst du, bevor du auf $_POST['anmelden'] zugreifst erstmal prüfen, ob dieses Feld überhaupt existiert (mit isset() oder !empty()).

            3. Session-ID-Übergabe

            Damit die Session wieder aufgenommen werden kann, musst du von Seite zu Seite die Session-ID (SID) übergeben. PHP macht das, indem es versucht einen Cookie mit der SID zu setzen. Klappt das nicht, musst du dafür sorgen, dass PHP die SID weitergibt, also alle Links, Formulare etc. damit bestückt. Wenn du PHP mit --enable-trans-sid kompiliert hast, kannst du einfach session.use_trans_sid auf on setzen, dann macht PHP das wiederum automatisch. arg_separator.output musst du in dem Fall allerdings noch auf '&amp;' setzen.

            Jo ... so müsste das eigentlich klappen. Hier noch die Seiten, die du hierfür durchlesen solltest:

            http://php.net/manual/en/ini.core.ph...gister-globals
            http://php.net/manual/en/security.globals.php
            http://php-faq.de/q/q-formular-register-globals.html

            http://php.net/manual/en/ref.errorfu...rror-reporting
            http://php.net/manual/en/function.error-reporting.php
            http://www.php-faq.de/q/q-fehler-variable.html

            http://php.net/manual/en/ref.session.php
            http://www.php-faq.de/ch/ch-version4_session.html

            Basti

            Kommentar


            • #7

              Und was soll ich jetzt genau machen? Bin ein Anfänger in Sachen PHP und deswegen stecke ich jetzt quasi in einer Sackgasse.

              Soll ich alles noch mal von neu machen? War dann die ganze Arbeit umsonst

              Ist dass nicht so, wie ich vermutet habe, dass die Meldung nur erscheint, weil in Wirklichkeit eine Session gestartet ist und ich nur es falsch programmiert habe s.o.?

              Wie kann ich denn folgenden Ausdruck:
              Code:
              <?php
              session_start(); 
              if($_SESSION['emai'])
              {
              die ("Sie müssen sich einloggen!");
              }
              ?>
              in folgendes ändern:
              Code:
              <?php
              session_start(); 
              if($_SESSION['email'])
              {
              alles palletti, mache nichts!
              } else {
              gehe zur url:www.domain.de/login.php
              }
              ?>
              Ich versuch erst Mal ob das geht. Kann mir da jemand helfen?
              Danke

              Kommentar


              • #8
                Schau dir mal folgendes kleine Beispiel an:
                PHP-Code:
                <?php
                error_reporting
                (E_ALL);
                ini_set('session.use_trans_sid''on');
                ini_set('arg_separator.output''&amp;');
                session_start();

                $sAction false;
                if (isset(
                $_REQUEST['action'])) $sAction $_REQUEST['action'];

                if (
                $sAction == 'login')  login();
                if (
                $sAction == 'logout'logout();

                if (!
                isLoggedIn()) {
                    
                printLogIn();
                } else {
                    
                printSecret();
                }


                function 
                isLoggedIn()
                {
                    return isset(
                $_SESSION['bLoggedIn']);
                }

                function 
                login()
                {
                    
                $sUsername 'admin';
                    
                $sPassword 'admin';
                    if (
                        isset(
                $_POST['username']) &&
                        
                $_POST['username'] == $sUsername &&
                        isset(
                $_POST['password']) &&
                        
                $_POST['password'] == $sPassword) {

                        
                $_SESSION['bLoggedIn'] = true;
                    }
                }

                function 
                logout()
                {
                    
                $_SESSION = array();
                    if (isset(
                $_COOKIE[session_name()])) {
                        
                setcookie(session_name(), ''time()-42000'/');
                    }
                    
                session_destroy();
                    return 
                true;
                }

                function 
                printLogIn()
                {
                    
                ?>
                    <form action="<?php echo getenv('SCRIPT_NAME');?>" method="post">
                        <fieldset>

                            <input type="hidden" name="action" value="login" />

                            <legend>LogIn</legend>

                            <label>Benutzername:

                                <input type="text" name="username" size="30" value="admin" />
                            </label>
                            


                            <label>Passwort:

                                <input type="password" name="password" size="30" value="admin" />
                            </label>


                            <input type="submit" value="abschicken" />

                        </fieldset>
                    </form>
                    <?php
                }

                function 
                printSecret()
                {
                    
                ?>
                    <p style="color: #f00;">Top Secret!</p>
                    

                [url="<?php echo getenv('SCRIPT_NAME')?>?action=logout"]Hier abmelden[/url]</p>
                    <?php
                }
                ?>
                Da siehst du, wie du die onfigurations-Parameter entsprechend veränderst, wie du ein Formular an das gleiche Skript schickst, das es ausgegeben hat, wie du die übergebenen Parameter auf Existenz und dann deren Inhalt prüfst, wie du daraufhin ggf. einen login-Flag in die Session schreibst, wie du diesen Wert überprüfen kannst und, wie dudie Session wieder tot kriegst.

                Natürlich ist das eine ziemlich blöde Konstruktion, aber ich wollte alles in eine Datei packen, es nicht komplex werden lassen und halbwes Anfängerfreundlich schreiben.

                Ich hoffe, du kannst was damit anfangen. Allerdings - lesen und verstehen musst du die Materie ohnehin, wenn du damit arbeiten möchtest. Andernfalls guck dich doch mal im Netz nach einer fertigen Lösung um, die dir ermöglicht, über eine einfache Schnittstelle Benutzer und Rechte auf bestmmte Ressourcen zu verwalten. Bestimmt gibt es auch irgendwo ein Skript, in dass du für einen Administrator die Zugangsdaten schreiben kannst und das du einfach mit einem require 'protect.php' oder so in die schützenswerten Scripte einbindest und die den ganzen Job dann für dich erledigen.

                Basti

                Kommentar

                Lädt...
                X