Ankündigung

Einklappen
Keine Ankündigung bisher.

Verflixte Sessions

Einklappen

Neue Werbung 2019

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

  • Verflixte Sessions

    Hey Leute!

    Ich versuche gerade ganz verzweifelt eine Loginseite zu bauen um einen Bereich zu schützen. Das hat soweit gut funktioniert.
    Nun möchte ich jedoch einen eindeutigen Identifyer, einen key jeweils mit übergeben, um dann in Folgeseiten benutzerspezifische SQL-Abfragen zu realisieren. In meinem Fall ist der "key" in jeder DB-Tabelle vorhanden und verweist auf Benutzereinträge von Daten.

    Im Folgenden poste ich mal meine Scripte, ich würde mich freuen wenn mir jemand hilft meinen Fehler zu finden. Einen Text in der Session zu übergeben hab ich übrigens schon hinbekommen, nur mit dem Key aus der DB-Abfrage hauts nicht hin...


    Meine login.php
    PHP-Code:
    <?php

      session_start
    ();

      include 
    "mysql_connectinfo.php";

      if (isset(
    $_SESSION['angemeldet']) || $_SESSION['angemeldet']) {
        
    header('Location: test.php');
        exit;
      }

      else if (
    $_SERVER['REQUEST_METHOD'] == 'POST') {

        
    $username $_POST['username'];
        
    $passwort $_POST['passwort'];

        
    $sql mysql_query("SELECT $mysqlname FROM $mysqltable WHERE $mysqlname='$username' AND $mysqlpwd='$passwort'");
        
    $key mysql_query("SELECT key FROM $mysqltable WHERE $mysqlname='$username'");
        
    $num mysql_num_rows($sql);

        if (
    $num != 0) {
          
    $_SESSION['angemeldet'] = true;
          
    $_SESSION['userkey'] = "testerchen";
          
    $tempkey mysql_result($key,0,0);
            
    $_SESSION['userkey'] = $tempkey;
                
          if (
    $_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
            if (
    php_sapi_name() == 'cgi') {
              
    header('Status: 303 See Other');
            }
            else {
              
    header('HTTP/1.1 303 See Other');
            }
          }

          
    header('Location: test.php');
          exit;
        }
        else {
          echo 
    "<p><b>Falsche Login-Daten!!</b></p>n";
        }
      }
    ?>
        <form action="login.php" method="post">
          <table border="0">
            <tr>
              <td>Username:</td>
              <td><input type="text" name="username" /></td>
            </tr>
            <tr>
              <td>Passwort:</td>
              <td><input type="password" name="passwort" /></td>
            </tr>
            <tr>
              <td> </td>
              <td><input type="submit" value="Einloggen" /></td>
            </tr>
          </table>
        </form>
    Meine auth.php
    PHP-Code:
    <?php

      session_start
    ();

      if (!isset(
    $_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
        
    header('Location: login.php');
        exit;
      }

    ?>
    Die aufgerufene test.php (In der das Ergebnis ausgegeben werden sollte)

    PHP-Code:
    <?php
    include "auth.php";
    $userkey $_SESSION['userkey'];
    echo(
    $userkey);
    //phpinfo();
    ?>

    Ich bedanke mich recht herzlich im Voraus

    LG

    Blindy

  • #2
    PHP-Code:
    $sql mysql_query("SELECT $mysqlname FROM $mysqltable WHERE $mysqlname='$username' AND $mysqlpwd='$passwort'");
    $key mysql_query("SELECT key FROM $mysqltable WHERE $mysqlname='$username'"); 
    Da fehlen auf jeden Fall schon einige quotes...
    Man kann nicht ohne qoutes eine php Variable an MySQL übergeben.
    Versuch das mal so:
    PHP-Code:
    $sql mysql_query("SELECT ".$mysqlname." FROM ".$mysqltable." WHERE ".$mysqlname."='".$username."' AND ".$mysqlpwd."='".$passwort."'");
    $key mysql_query("SELECT key FROM ".$mysqltable." WHERE ".$mysqlname."='".$username."'"); 
    Wären da eine quotes drum, würde mysql nämlich nach einer Spalte mit dem Namen "$mysqlname" in der Tabelle "$mysqltable" suchen. Das würde dann schon nen error geben wenn es die tabelle nicht gibt und falls es sie doch gibt, würde es wieder einen Error geben, weil mysql das Column nicht in der Tabelle finden kann.

    Dein Key wurde nie übergeben, weil das Ergebnis deiner Abfrage immer NULL bzw. ein Fehler war.
    PHP-Code:
    $tempkey mysql_result($key,0,0);
    $_SESSION['userkey'] = $tempkey
    Weil dadrin ja das Ergebnis der Query "$key" gebraucht wird, um $_SESSION['userkey'] neu zu setzten.
    Zuvor hast du ja den Wert "testerchen" da reingesetzt, aber das wird wegen der leeren Abfrage wieder überschrieben.

    Kommentar


    • #3
      und wo ist mysql_real_escape_string() ?

      und mysql_error() ?

      Kommentar


      • #4
        Hi arcissolutions1,

        besten Dank aber trotz Umbau kommt noch nix an... :S

        Kommentar


        • #5
          Setzt mal am Anfang error_reporting(E_ALL) oder error_reporting(-1) und guck mal, ob es dann eine Fehlermeldung gibt.

          und noch einmal; mysql_real_escape_string() sowie mysql_error() sind keine Pflicht, aber auf jeden Fall empfehlenswert!
          Zuerst sollte man sein Script zum laufen bringen und dann erst daran rumbasteln.

          Kommentar


          • #6
            Keine Fehler die ausgegeben werden...

            Kommentar


            • #7
              Dazu:

              Zitat von arcissolutions1 Beitrag anzeigen
              ... mysql_real_escape_string() sowie mysql_error() sind keine Pflicht, aber auf jeden Fall empfehlenswert!
              Zuerst sollte man sein Script zum laufen bringen und dann erst daran rumbasteln.
              Siehe hier:

              http://www.php.de/php-einsteiger/921...tml#post676131

              LG

              Kommentar


              • #8
                mysql_error is im connection script verwurstet und zeigt keinen Fehler, das Login tut ja auch wunderbar. Lediglich die Key-Übergabe verusacht bei mir Grauhaarwuchs :S

                Kommentar


                • #9
                  Merci übrigens für den Hinweis auf mysql_real_escape_string

                  Kommentar


                  • #10
                    Prüfe ob Du überhaupt in das relevante if kommst!

                    zB Du hast da zwei querys vor dem if, führst aber nur eine aus. Die andere führst du erst in der anderen If drinnen (warum ?) - meinst du da ev:

                    PHP-Code:
                    $num mysql_num_rows($key);
                    // statt
                    $num mysql_num_rows($sql); 
                    Ansonsten debugging ...
                    http://www.php.de/wiki-php/index.php/Debugging

                    Las dir die Vars an den relevanten Stellen (zB vor if() ) ausgeben etc.. Prüf was von mysql zurückkommt, ob das das erwartete ist etc.. etc.. Das wird dir hier keiner abnehmen !!

                    Für PHP-Code gibt es übrigend eigene Tags.. bitte die noch ändern - statt den CODE Tags.

                    LG

                    Kommentar


                    • #11
                      Hi hausl,

                      Danke für den Hint, aber ich meine es schon so wie es da steht.
                      Erst werden die Credentials geprüft und wenn gut dann soll im nächsten Step der eindeutige Key ausgelesen und übergeben werden.
                      Das sollte doch so hinhauen?

                      Kommentar


                      • #12
                        statt hier Rumzuraten solltest Du error_reporting einschalten,
                        mysql_error bei allen Abfragen einbauen und echos einbauen
                        die Dir anzeigen bis wohin das Script kommt.

                        Kommentar


                        • #13
                          Zitat von BlindOracle Beitrag anzeigen
                          Das sollte doch so hinhauen?
                          Tut es doch aber nicht, sonst wärst Du nicht hier. Nochmals .. es wird dir keiner Deine Arbeit abnehmen und Deinen Code zu debuggen - Links wurden ja schon genannt.

                          LG

                          Kommentar


                          • #14
                            @hausl

                            Merci, Tags sind angepasst.
                            Ich bin schon fleissig am Debuggen, kriege aber korrekte Werte und SQL-Queries angezeigt... Ich peils nicht :S

                            Naja, irgendwie werd ich den Fehler schon finden.

                            Kommentar

                            Lädt...
                            X