Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP 4 -> 7 Session/Login Problem bei 1und1

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

  • PHP 4 -> 7 Session/Login Problem bei 1und1

    Hallo Zusammen,

    ich stelle gerade meine Vereinsseite mit ein paar PHP Skripten und MySQL Anbindung von PHP 4 auf PHP 7 um. Hierbei habe ich hauptsächlich mysql_query & Co auf mysqli umgestellt.
    Das ganze teste ich auf einem XAMPP for Windows 7.2.0. Nach dem hier alles funktioniert hat, habe ich die Seite zu 1und1 hochgeladen um dort fest zustellen, dass das Loginskript nicht mehr funktioniert.

    Merkwürdig ist, dass ich hier auch nur mysqli umgestellt habe und das skript lokal auf XAMPP funktioniert. Gehe ich in der PHP Version bei 1und1 wieder auf PHP 5 zurück funktioniert mein Login. Wenn ich mit einer Bestehenden Session wieder von PHP 5 auf 7 umstelle bin ich eingeloggt. Sprich die Session ansich funktioniert, aber das erstellen der Session scheinbar nicht.

    Versuche ich mich ohne Session Cookie einzulogen Meldet mein Skript "Erfolgreich Eingelogt!" und im FF sehen ich ein Session Cookie. Meine Seite verhält sich aber immer noch als wäre ich nicht eingeloggt.

    Hier mal mein login Skript:
    PHP-Code:

    <?php
    session_start
    ();
    ini_set("default_charset""iso-8859-1");
       require_once(
    "funktionen.php");

       
    extract($_POST);

       
    //Manueller Login
       
    if(isset($login_button))
       {           
            
    $_SESSION['login']=$login;
               
    $_SESSION['pw']=md5($pw);
               if(isset(
    $remind_pw))
               {    
                
    $_SESSION['remind_login']="yes";
            }

            echo 
    "<b>Erfolgreich Eingelogt!</b><br> <a href='verwaltung2.php'>Verwaltung</a>";
       }

       if(isset(
    $register_button))
       {
               
    $return=newuser($email,$pw_register,$pw_repeat);   
               if(
    is_numeric($return))
               {    echo
    "Dein Account wurde erstellt. Du musst dich noch einlogen";           }
               else
               {    echo 
    $return;    }

               
    $logout true//Zuletzt eingeloggter Nutzer wird ausgeloggt
       
    }

       if(isset(
    $_GET['logout']) && $_GET['logout'])
       {    
               
    // Löschen aller Session-Variablen.
            
    $_SESSION = array();

            
    // löschen des Session-Cookie.
            
    if (isset($_COOKIE[session_name()]))
                
    setcookie(session_name(), ''time()-42000);        

            
    // Zum Schluß, löschen der Session.
            
    session_destroy();

            echo 
    " Sie wurden ausgeloggt";
       }

    ?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
      <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
      <title>Login</title>
      <link rel="stylesheet" type="text/css" href="../tauchen.css">
    </head>

    <body>
    <?php

    //echo $_SESSION['login']."-->".$_SESSION['pw'];
    //echo "<pre>";
    //print_r($_SESSION);
    //print_r($_POST);
    //print_r($_GET);
    //echo "</pre>";

    ?>
    <h1>Login</h1>
    <form name="login" action="<?=$_SERVER['PHP_SELF']?>" method="POST">
    <table>
      <tr>
        <td>Login:</td>
        <td><input type="text" name="login" value="<?php if(isset($_POST['login'])) echo $_POST['login']?>"></td>
      </tr>
      <tr>
        <td>Passwort:</td>
        <td><input type="password" name="pw"></td>
      </tr>

      <tr>
        <td><input type="submit" value="abschicken" name="login_button"></td>
        <td></td>
      </tr>  
    </table>
    </form>
    </body>
    </html>
    Seite die einen Login benötigen bzw. Zusatzfunktionen durch den Login bieten starten mit:
    PHP-Code:
    <?php
    ini_set
    ("default_charset""iso-8859-1");
        require_once(
    "funktionen.php");
        
    auth(1);
    auth funktion sieht wie folgt aus (Die Datenbank Verbindung wird zuvor erstellt ... $connection = mysqli_connect(SERVER, DB_LOGIN, DB_PW, DB_NAME))
    PHP-Code:
    function auth($benoetigtes_recht 2)
    {
        global 
    $connection;
        
    $id=0;
        
    //Password und Login werden mit hilfe von Sessions weiter gegeben.
        
    session_start();

        
    $loginID=0;
        
    $login_error=false//für Fehlermeldungen

        
    if(isset($_SESSION['pw']) || isset($_SESSION['login']))
        {
            
    $login_error=true;
            
    $query="SELECT id, anrede, vorname, name, email, rechte
                    FROM nutzer WHERE email='"
    .$_SESSION['login']."' AND pw='".$_SESSION['pw']."'";

            
    $data=$connection->query($query) or die("auth(): <br>$query<br>".$connection->error);
            if(
    $row $data->fetch_array(MYSQLI_BOTH))
                
    extract($row);
        }

        if(
    $id!=0)//User gefunden
        
    {

            
    //Wenn ein Rest beim Modulo rechnen bleibt, darf der entsprechende bereich nicht aufgerufen werden
            
    if($rechte $benoetigtes_recht 0){
                
    header("location:verwaltung2.php");
            }
            return array(
    "id" => $id"recht" => $rechte"anrede" => $anrede"vorname" => $vorname"name" => $name"email" => $email);
        }
        else
        {
            
    $_SESSION = array(); //löschen aller Session Variablen
            
    header("location:login.php?login_error=true");        
            return 
    false;
        }    

    Wenn ich mir in der auth() $_SESSION['pw'] und $_SESSION['login'] ausgeben lasse sind diese bei mir lokal gefüllt. Auf dem 1und1 Host nicht.

    Lange Rede kurzer Sinn. Kann mir jemand sagen, warum meine Session nicht richtig angelegt wird bzw. warum meine auth() Funktion diese auf einmal nicht mehr kennt (global $_SESSION; in auth() aufnehmen ändert auch nix)?


  • #2
    Mal ganz ehrlich? Entsorgen und neu machen. So viele Sicherheitslücken und Fehler in so wenig Code. Da bringt es nix nur den Session-Teil zu reparieren.

    Schreibs neu. Ist ja zu Glück nicht so viel an Code

    Kommentar

    Lädt...
    X