Ankündigung

Einklappen
Keine Ankündigung bisher.

SessionVariabeln werden nicht übergeben.

Einklappen

Neue Werbung 2019

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

  • SessionVariabeln werden nicht übergeben.

    Hallo zusammen,
    ich bin langsam wirklich am verzweifeln und erhoffe mir hier eine Lösung.
    Verzeiht mir bitte wenn ich hier irgendetwas unübersichtlich gestaltet habe, dass ist mein erster Beitrag in einem Forum.

    Zu meinem Problem:
    Nach dem Login, werden keine Session Variabel übergeben. Das komische daran ist, dass es auf meinem Localhost xampp (PHP 7.4.24) Server einwandfrei funktioniert.
    Da ich das Script auch einmal auf meinem Webserver von Strato (PHP 7.4.25) testen wollte, habe ich es hochgeladen die Änderungen zur Datenbank vorgenommen und erwartet das alles funktioniert.
    Leider war dem nicht so...hier einmal der Code:

    login.php:
    PHP-Code:
    <?php
    session_start
    ();
    include_once(
    'database.php');
    global 
    $pdo;  
    if (
    $_POST['username'] != "" && $_POST['password'] != "") {    
               
    $stmt $pdo->prepare("SELECT * FROM users WHERE username = ?");    
               
    $stmt->execute(array($_POST['username']));    
               
    $user $stmt->fetch();    
               if(
    $user != false) {        
                        if (
    $user['password'] == md5($_POST['password'])) {
                                     
    //Login ist erfolgreich
                                     
    $statement $pdo->prepare("UPDATE users SET onlinestatus = ? WHERE id = ?");
                                     if (
    $statement->execute(array('true'$user['id']))) {
                                                
    $_SESSION['status'] = true;
                                               
    $_SESSION['userid'] = $user['id'];
                                               
    $_SESSION['lockscreen'] = false;
    ​​​​​​​                                            $_SESSION['displayname'] = $user['displayname'];
    ​​​​​​​​​​​​​​                                            $_SESSION['profilpicture'] = 'https://example.de/path/' $user['profilepicture'];
    ​​​​​​​​​​​​​​                                            $_SESSION['firstname'] = $user['firstname'];
    ​​​​​​​​​​​​​​                                            $_SESSION['lastname'] = $user['lastname'];
    ​​​​​​​​​​​​​​                                            $_SESSION['setting_color1'] = $user['setting_color1'];
    ​​​​​​​​​​​​​​                                            $_SESSION['setting_color2'] = $user['setting_color2'];
    ​​​​​​​​​​​​​​                                            $_SESSION['setting_sidebar'] = $user['setting_sidebar'];
    ​​​​​​​​​​​​​​                                            if($user['last_page'] != "" || $user['last_page'] != "null"){
    ​​​​​​​​​​​​​​                                                       echo $user['last_page'];
    ​​​​​​​​​​​​​​                                            }else{
    ​​​​​​​​​​​​​​                                                       echo $user['https://example.de'];
    ​​​​​​​​​​​​​​                                            }
                                     } else {
                                          echo 
    'fatalerror';
                                     }
                          } else {
                               echo 
    'pwfalse';
                          }
               }else{
                   echo 
    'notfound';
               }
    }else{
    ​​​​​​​    echo 'fillerror';
    }
    Nachdem der Login dann auch erfolgreich angezeigt wird, und der Online Status in der Datenbank sogar auf 'true' gesetzt wird, bekomme ich in meiner index.php keine Werte ausgegeben...
    Habe mir auch die Session über
    PHP-Code:
    var_dump($_SESSION); 
    ausgeben lassen, da erhalte ich den Wert "null". Also denke ich die Session wird nicht übergeben.

    Hier der Code meiner Index

    index.php:
    PHP-Code:
    <?php
    session_start
    ();
    include_once(
    'class/database.php');
    global 
    $pdo;
        if(isset(
    $_SESSION['userid'])){
           if (
    $_SESSION['lockscreen'] == true) {
              
    header('Location: secure/lockscreen/');
           }
           if (isset(
    $_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
              
    $url "https://";
           }else {
              
    $url "http://";
           }
           
    $url.= $_SERVER['HTTP_HOST'];
           
    $url.= $_SERVER['REQUEST_URI'];
           
    $lpstmt $pdo->prepare("UPDATE users SET last_page = ? WHERE id = ?");
           
    $lpstmt->execute(array($url$_SESSION['userid']));
         }else{
           
    header('Location: secure/anmelden/');    
         }
    ?>
    Wäre echt mega, wenn mir irgendjemand dabei helfen könnte.

    Vielen Dank im Voraus!

  • #2
    Wird denn die Session abgefüllt? Liefert session_start() true zurück? Fehlerausgabe aktiviert oder in den error_log geschaut?

    By the way, global würde ich ganz schnell wieder vergessen und md5() sowieso. Dafür gibt es password_hash() und password_verify().

    Kommentar


    • #3
      Zitat von erocodes Beitrag anzeigen
      Also denke ich die Session wird nicht übergeben.
      Nicht denken, nachschauen. Wird das Session-Cookie übertragen (in beide Richtungen)? Error_reporting und display_errors aufgedreht? Wird die Session-Datei auf dem Server angelegt? Sind die Domains von Login und index.php identisch? Wird das Cookie evtl. nur an bestimmte Unterpfade geschickt, aber nicht an die index.php?

      Noch ein paar Hinweise zum Code, da sind ein paar richtig üble Sachen drin:

      global $pdo;
      global ist böse[tm] - und der Sinn an der Stelle erschließt sich mir hier nicht so wirklich …

      if ($user['password'] == md5($_POST['password'])) {
      Ganz böser Fehler. Benutzerpasswörter dürfen niemals im Klartext gespeichert werden und da md5 als geknackt anzusehen ist, heißt das auch dass md5 zum Speichern von Passwörtern ungeeignet ist (ungesalzen schon gleich dreimal) - verwende password_hash() bzw. password_verify().

      } else {
      echo 'pwfalse';
      }
      }else{
      echo 'notfound';
      }
      Wenn der Login fehlschlägt darf die Fehlermeldung keine Auskunft darüber geben ob Benutzername oder Passwort falsch waren: ein Angreifer kann sonst erstmal auf gültige Benutzernamen prüfen und dann das Passwort dazu. Wenn es einfach nur eine Meldung "falsche Daten" o.ä. gibt, weiß er nie was genau falsch war.
      Das zweite und dritte if lässt sich dann auch zusammenfassen und du hast eine Einrückungsebene weniger - so wirklich übersichtlich sind die vielen Ebenen nicht …

      if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
      Wozu die Unterscheidung? Die Seite sollte grundsätzlich ausschließlich per https erreichbar sein und ein http-Request direkt einen Redirect auf https… auslösen. btw: es ist ja schön dass du Beispiel-URLs verwenden willst - bei den example-Domains gibt es die .de aber nicht, nur .com/.net/.org.

      Kommentar


      • #4
        Zitat von jonas3344 Beitrag anzeigen
        Wird denn die Session abgefüllt? Liefert session_start() true zurück? Fehlerausgabe aktiviert oder in den error_log geschaut?

        By the way, global würde ich ganz schnell wieder vergessen und md5() sowieso. Dafür gibt es password_hash() und password_verify().
        Hey, danke erstmal!

        Habe den error_log einmal durchgeschaut, die $_SESSION Variabel wird nicht gesetzt.

        Code:
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Undefined variable: _SESSION in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 58
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Trying to access array offset on value of type null in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 58
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Undefined variable: _SESSION in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 58
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Trying to access array offset on value of type null in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 58
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Undefined variable: _SESSION in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 58
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Trying to access array offset on value of type null in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 58
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Undefined variable: _SESSION in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 259
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Trying to access array offset on value of type null in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 259
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Undefined variable: _SESSION in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 262
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Trying to access array offset on value of type null in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 262
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Undefined variable: _SESSION in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 263
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Undefined variable: _SESSION in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 269
        [05-Nov-2021 20:21:56 CET] PHP Notice:  Trying to access array offset on value of type null in /mnt/web501/b3/37/511260737/htdocs/office/e21f5bf8dbd632128547835986bdafbf.php on line 269
        Obwohl in der login.php alles gesetzt wird.

        Kommentar


        • #5
          Problem Gelöst!

          Ich habe mir eben nocheinmal die php.ini von dem Strato Webserver angeschaut und nach dem 4 mal durchschauen…ist mir dann aufgefallen das, dass Verzeichnis von „session.save_path“ garnicht existiert.

          Danke für die Mithilfe!

          Kommentar

          Lädt...
          X