Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP 5.6 - Problem mit Weitergabe der Session ID

Einklappen

Neue Werbung 2019

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

  • PHP 5.6 - Problem mit Weitergabe der Session ID

    Hallo liebes Forum,
    momentan bin ich dabei, ein Anmeldeskript für meine Website zu programmieren. Die Website läuft momentan noch auf PHP 5.6, da ich noch nicht auf "mysqli" umgestiegen bin, und "mysql_..."-Befehle in PHP 7.0 aus einem mir unbekannten Grund nicht wirklich funktionieren.
    Ich teste auf einem USB-Webserver, der auch auf Version 5 läuft (Welche genau weiß ich leider nicht, bei USBWebserver 8.6 habe ich keine Informationen dazu gefunden).

    Mein Problem ist nun, dass ich ein LogIn-Skript habe, welches bei korrekten Eingaben die ID des jeweiligen Benutzers in der Session ID speichert und anschließend auf den "privaten Bereich" weiterleitet. Dort wird dann als erstes abgefragt, ob bereits eine ID eines Benutzers in der Session ID gespeichert worden ist, wenn nicht, wird man wieder auf die LogIn-Seite weitergeleitet, ansonsten wird einem der "private Bereich" angezeigt.
    Auf dem USB-Webserver funktioniert im Gegensatz zur Website alles problemlos, woran könnte das liegen?

    Hier der Code dazu:

    LogIn-Datei
    PHP-Code:
    <?php
    //Starten der Session
    session_start();
    ?>

    <!DOCTYPE html>
    <meta charset = "UTF-8"/>
    <html>
        <head>
            <?php
            $vPDO 
    = new PDO('mysql:host=' $sqlServer ';dbname=' $sqlDatenbank$sqlBenutzername$sqlPasswort);
            
    ?>
        </head>
        <body>
                    <!--LogIn-->
                        <form action = "?login=1" method = "POST">
                            <input name = "benutzername" placeholder = "Benutzername" type = "benutzername"/><br/>
                            <input name = "passwort" placeholder = "Passwort" type = "password"/><br/>
                            <input type = "submit" value = "Anmelden"/><br/>
                            <br/>
                        </form>
                        <?php
                        
    if(isset($_GET['login']))
                        {
                            
    $vBenutzername $_POST['benutzername'];
                            
    $vPasswort $_POST['passwort'];

                            
    $sqlBefehl $vPDO->prepare("SELECT * FROM benutzer WHERE benutzername = :benutzername");
                            
    $sqlBefehl->execute(array('benutzername' => $vBenutzername));
                            
    $vBenutzer $sqlBefehl->fetch();

                            
    //Überprüfung der Kenndaten
                            
    if($vBenutzer !== FALSE && password_verify($vPasswort$vBenutzer['passwort']))
                            {
                                
    $_SESSION['userid'] = $vBenutzer['id'];
                                die(
    '<meta http-equiv="refresh" content="0; URL=index.php">');
                            }
                            else
                            {
                                echo(
    "Benutzername oder Passwort ungültig!");
                            };
                        }
                        
    ?>
        </body>
    </html>
    "Private" Datei:
    PHP-Code:
    <?php
    //Starten der Session und überprüfen der Nutzer ID vom Login
    session_start();

    //Ist keine Nutzer ID vorhanden, wird der Benutzer zurückgewiesen
    if(!isset($_SESSION['userid']))
    {
        die(
    '
        <meta http-equiv="refresh" content="0; URL=privatLogIn.php">
        <script type = "text/javascript">
            alert("Bitte melden Sie sich zuerst an.");
        </script>
            '
    );
    };
    ?>

    <!DOCTYPE html>
    <meta charset = "UTF-8"/>
    <html>
    //Inhalt
    </html>
    Ich hoffe ihr könnt mir ein paar Tipps geben, ich weiß einfach nicht mehr weiter.


    Noch einen angenehmen Abend wünscht,
    phpWeb55.

  • #2
    Bau mal ein minimales Beispiel (ohne Datenbankfirlefanz, usw.) bei dem das Problem auftritt. Dein Code ist so nicht testbar.

    Kommentar


    • #3
      und "mysql_..."-Befehle in PHP 7.0 aus einem mir unbekannten Grund nicht wirklich funktionieren.
      Dann solltest du mal eine Blick ins Handbuch werfen: http://php.net/mysql

      Introduction

      Depending on the version of PHP, there are either two or three PHP APIs for accessing the MySQL database. PHP 5 users can choose between the deprecated mysql extension, mysqli, or PDO_MySQL. PHP 7 removes the mysql extension, leaving only the latter two options.

      Kommentar


      • #4
        Introduction

        Depending on the version of PHP, there are either two or three PHP APIs for accessing the MySQL database. PHP 5 users can choose between the deprecated mysql extension, mysqli, or PDO_MySQL. PHP 7 removes the mysql extension, leaving only the latter two options.
        Stimmt, den Text habe ich schon einmal gelesen.

        Bau mal ein minimales Beispiel (ohne Datenbankfirlefanz, usw.) bei dem das Problem auftritt. Dein Code ist so nicht testbar.
        LogIn-Datei:
        PHP-Code:
        <?php
        //Starten der Session
        session_start();
        ?>

        <!DOCTYPE html>
        <meta charset = "UTF-8"/>
        <html>
          <body>
            <form action = "?login=1" method = "POST">
              <input name = "benutzername" placeholder = "Benutzername" type = "benutzername"/><br/>
              <input name = "passwort" placeholder = "Passwort" type = "password"/><br/>
              <input type = "submit" value = "Anmelden"/>
            </form>
            <?php
            
        if(isset($_GET['login']))
            {
              
        $vBenutzername $_POST['benutzername'];
              
        $vPasswort $_POST['passwort'];

              
        //Überprüfung der Kenndaten
              
        if($vBenutzername == 'phpWeb55' && $vPasswort == 'passwort')
              {
                
        $_SESSION['userid'] = $vBenutzer['id'];
                die(
        '<meta http-equiv="refresh" content="0; URL=indexNEU.php">');
              }
              else
              {
                echo(
        "Benutzername oder Passwort ungültig!");
              };
            }
            
        ?>
          </body>
        </html>
        "Private" Datei:
        PHP-Code:
        <?php
        //Starten der Session und überprüfen der Nutzer ID vom Login
        session_start();

        //Ist keine Nutzer ID vorhanden, wird der Benutzer zurückgewiesen
        if(!isset($_SESSION['userid']))
        {
            die(
        '
            <meta http-equiv="refresh" content="0; URL=privatLogInNEU.php">
            <script type = "text/javascript">
                alert("Bitte melden Sie sich zuerst an.");
            </script>
                '
        );
        };
        ?>

        <!DOCTYPE html>
        <meta charset = "UTF-8"/>
        <html>
            <body>
                <p>Willkommen im privaten Bereich!</p>
            </body>
        </html>
        Das ist der Code ohne Zugriff auf eine Datenbank. Stattdessen werden Benutzername und Passwort mit Hilfe einer If-Abfrage überprüft. Es tritt der selbe Fehler wie vorher auf: Die Session ID scheint nach der Weiterleitung gelöscht zu werden.

        Ich habe übrigens die Vermutung, dass es an dem Webserver von 1&1 liegen könnte, da das LogIn auf meinem USB-Webserver, welcher lokal (localhost) läuft, problemlos funktioniert.


        Ich hoffe der Code ist aussagekräfter als der Vorherige,
        phpWeb55.

        Kommentar


        • #5
          Es tritt der selbe Fehler wie vorher auf: Die Session ID scheint nach der Weiterleitung gelöscht zu werden.
          Is ja auch logisch, da $vBenutzer['id'] nicht existiert (da auskommentiert).

          Kommentar


          • #6
            Is ja auch logisch, da $vBenutzer['id'] nicht existiert (da auskommentiert).
            Das war ein Fehler meinerseits, den ich beim Umschreiben gemacht habe. Normalerweise sollte $_SESSION['userid'] nämlich die ID des entsprechenden Benutzers (Welche in der Datenbank gespeichert ist) zugewiesen werden. Ändere ich $vBenutzer['id'] zu bspw. 1 funktioniert das LogIn. Das Problem muss also doch bei der Datenbank liegen.

            Kommentar


            • #7
              Ich habe den Code oben jetzt wieder um die Zeilen erweitert, die einen Datenbankzugriff ermöglichen ... was soll ich sagen, es hat funktioniert. Nun habe ich mich, ohne etwas an der alten Datei (die als erstes erwähnte) zu verändern, spaßeshalber versucht einzuloggen - es hat funktioniert. Das Problem ist nur, dass es momentan nur im Firefox "einfach so" funktioniert, im IE hingegen nicht.

              Meine Vermutung: Es liegt eventuell an der Abfrage, mit welcher das Programm auf die Datenbank zugreift ... gibt es eine Möglichkeit diese Abfrage ohne PDO zu machen?

              Grüße,
              phpWeb55

              Kommentar


              • #8
                gibt es eine Möglichkeit diese Abfrage ohne PDO zu machen?
                Woher weißt du, daß es an PDO liegt?

                Das Problem ist nur, dass es momentan nur im Firefox "einfach so" funktioniert, im IE hingegen nicht.
                Allein die Tatsache, daß es im FF funktioniert, beweist doch schon, daß es nicht an PDO liegen kann.

                Kommentar


                • #9
                  Ich habe das Problem vermutlich gefunden: Es lag nicht an PDO Und zwar habe ich in meiner LogIn-Datei noch vor der "session_start()" einen Befehl ausgeführt, der anzeigt, wann die Datei zuletzt bearbeitet worden ist. Nun habe ich "session_start()" wirklich ganz nach oben geschrieben und es hat funktioniert, nun geht es in allen Browsern!


                  Trotzdem vielen Dank für die Hilfe,
                  phpWeb55.

                  Kommentar


                  • #10
                    Also wieder mal Fehlersuche in einem Fantasiecode...

                    Kommentar

                    Lädt...
                    X