Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular mit Session

Einklappen

Neue Werbung 2019

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

  • Formular mit Session

    Das ist mein Formular, mit Abfrage ob Pass und Username richtig sind:

    PHP-Code:
    <?php
        session_start
    ();
        include 
    'func.php';
        
        if(isset(
    $_POST['login'])){
            
    $userid=check_user($_POST['username'], $_POST['password']);
            if(
    $userid!=false){
                
    login($userid);
            }
            else{
                echo 
    'Ihre Anmeldedaten waren nicht korrekt!';
            }
        }
        if(!
    logged_in()){
            echo
    '<form action="eingeloggt.php" METHOD="POST">
                <label>Username: </label><input type="text" name="username"><br>
                <label>Password: </label><input type="password" name="password"><br>
                <input type="submit" id="login" name="login" value="login">
            </form>'
    ;
        }
    ?>
    Wenn ich jetzt jedoch auf die eingeloggt.php Seite weitergeleitet werde, merkt er sich das alles ned. Und wenn ich die login.php dann aufrufe bin ich wieder ausgeloggt, ohne das ich mich ausloggen musste.
    Woran scheiterts hier!?


  • #2
    Tja dass können wir dir schlecht sagen wenn wir nicht wissen was login() macht

    Kommentar


    • #3
      Das ist die func.php, wo z.b. auch login() drin ist

      PHP-Code:
      <?php
          
      function connect(){
              
      define('MYSQL_HOST''localhost');
              
      define('MYSQL_USER''xxx');
              
      define('MYSQL_PASS''xxx');
              
      define('MYSQL_DATABASE''xxx'); 
              
      mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR
                  die(
      "Es konnte keine Verbindung aufgebaut werden\n".mysql_error());
              
      mysql_select_db(MYSQL_DATABASE) OR
                  die(
      "Konnte ".MYSQL_DATABASE." nicht benutzen ".mysql_error());
          }
          function 
      check_user($name$pass){
              
      $user "SELECT UserID
                      FROM users
                      WHERE UserName='"
      .$name."' AND UserPass=MD5('".$pass."') 
                      LIMIT 1"
      ;
              
      $result mysql_query($user) OR die(mysql_error());
              
              if(
      mysql_num_rows($result) == 1){
                  
      $user mysql_fetch_assoc($result);
                  return 
      $user['UserID'];
              }
              else{
                  return 
      false;
              }
          }
          function 
      login($userid){
              
      $sql="UPDATE users
              SET UserSession='"
      .session_id()."'
              WHERE UserId="
      .$userid;
              
              
      mysql_query($sql);
          } 
          function 
      logged_in(){
              
      $sql="SELECT UserId
              FROM users
              WHERE UserSession='"
      .session_id()."'
              LIMIT 1"
      ;
              
      $resultmysql_query($sql);
              
              return ( 
      mysql_num_rows($result)==1);
          } 
          function 
      logout(){
              
      $sql="UPDATE users
              SET UserSession=NULL
              WHERE UserSession='"
      .session_id()."'";
              
              
      mysql_query($sql);
          } 
          
          
      connect();
      ?>

      Kommentar


      • #4
        Wichtig: Das Skript ist anfällig für sql injections, PHP Programming/SQL Injection - Wikibooks, collection of open-content textbooks

        Dann schlage ich erstmal vor, die Funktion connect() durch
        PHP-Code:
        function db() {
          static 
        $mysql null;
          if (
        is_null($mysql)) {
            
        $mysql mysql_connect('localhost''xxx''xxx') OR die(mysql_error());
            
        mysql_select_db('xxx') OR die(mysql_error());
          }
          return 
        $mysql;

        zu ersetzen und überall dort, wo eine Verbindungsresource benötigt wird, aufzurufen. Zum Beispiel
        PHP-Code:
        function check_user($name$pass) {  
          
        $sql "SELECT
              UserID
            FROM
              users
            WHERE
              UserName='"
        .mysql_real_escape_string($namedb())."'
              AND UserPass='"
        .md5($pass)."'
            LIMIT
              1"
        ;
          
        $result mysql_query($sqldb()) OR die(mysql_error()); 
        Darüber hinaus ist vielleicht noch weiterer Debug-Code sinnvoll.
        PHP-Code:
        <?php
        define
        ('MYDEBUG''yes');

        if (
        defined('MYDEBUG')) {
          
        error_reporting(E_ALL);
          
        ini_set('display_errors'1);
          
        ini_set('html_errors'1);
          
        ini_set('mysql.trace_mode'1);
        }

        Kommentar

        Lädt...
        X