Ankündigung

Einklappen
Keine Ankündigung bisher.

Session läuft sofort ab

Einklappen

Neue Werbung 2019

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

  • Session läuft sofort ab

    Hallo,
    ich habe ein Loginsystem geschrieben das auf Sessions basiert.
    Nach dem ich das System auf meinem PC getestet habe und auch alles funktioniert, habe ich es ins Web geladen.
    Wenn ich mich jetzt auf dem System im Web einlogge, öffnet sich nach dem ich die Userdaten weggeschickt habe zwar der Login-Bereich, aber nach dem ich einen Link in diesem Bereich geklickt habe, habe ich auf meinem Bildschirm wieder die Loginmaske.

    Hier der erwünschte Code:
    PHP-Code:
    // In diesen 3 Dateien sind configurationen für die Seite. In der "header.inc.php" befindet sich unter anderem das session_start().
    include("../config.inc.php");
    include(
    "header.inc.php");
    include(
    "../db_connect.inc.php");

    // Variablendefinition
    $unavi = array();
    $row_navi = array();
    $username '';
    $passwort '';
    $content '';
    $content_head  '';

    if(!isset(
    $_SESSION['logged'])) $_SESSION['logged'] = '';
    if(isset(
    $_POST['admin_user'])) $username $useful->mysql_escape($_POST['admin_user']);
    if(isset(
    $_POST['admin_pass'])) $passwort $useful->mysql_escape($_POST['admin_pass']);
    if(isset(
    $_POST['admin_login'])) $klick_login $useful->mysql_escape($_POST['admin_login']);

    // Wurden keine Login-Daten eingegeben wird dem User wieder die Loginmaske gezeigt.
    if($username == NULL and $passwort == NULL and $_SESSION['logged'] == NULL) {
    $smarty->display('admin/index_login.tpl');
    }
    // Hier werden die Logindaten verarbeitet
    if($username <> NULL and $passwort <> NULL and $_SESSION['logged'] == NULL) {
    // Die Daten des Users werden aus der DB geholt...
    $sel_user mysql_query("SELECT
    $db_t_admin_user.user_id, $db_t_admin_user.sicherheitsstufe_id, $db_t_admin_user.vorname,
    $db_t_admin_user.nachname, $db_t_admin_user.email, $db_t_admin_user.username, $db_t_admin_user.passwort,
    $db_t_admin_sicherheitsstufe.stufenbezeichnung, $db_t_admin_sicherheitsstufe.stufe
    FROM
    $db_t_admin_user
    LEFT JOIN
    $db_t_admin_sicherheitsstufe
    ON
    $db_t_admin_user.sicherheitsstufe_id = $db_t_admin_sicherheitsstufe.sicherheitsstufe_id
    WHERE
    $db_t_admin_user.username = '$username' AND
    $db_t_admin_user.passwort = '$passwort'");
    $row_user mysql_fetch_array($sel_user);

    // ...und in der Session gespeichert.
    if(mysql_affected_rows() <> 0) {
    $_SESSION['user_id'] = $row_user['user_id'];
    $_SESSION['sicherheitsstufe'] = $row_user['stufe'];
    $_SESSION['stufenbezeichnung'] = $row_user['stufenbezeichnung'];
    $_SESSION['username'] = $row_user['username'];
    $_SESSION['passwort'] = $row_user['passwort'];
    $_SESSION['vorname'] = $row_user['vorname'];
    $_SESSION['nachname'] = $row_user['nachname'];
    $_SESSION['email'] = $row_user['email'];
    $_SESSION['logged'] = 1;
    }

    // Wurde bei dem Login versuch keine Übereinstimmung gefunden, wird dem User wieder die Login-Maske angezeigt.
    if(mysql_affected_rows() == NULL and $_SESSION['logged'] == NULL) {
    $smarty->display('admin/index_login.tpl');
    }

    // Damit geguckt werden kann welcher User sich wann eingelogt hat, werden seine Daten noch in diese Tabelle geschrieben
    mysql_query("INSERT INTO
    $db_t_admin_login_statistik
    SET
    user_id = '
    $_SESSION[user_id]',
    zeit_datum = NOW(),
    ip = '
    $_SERVER[REMOTE_ADDR]',
    user_agent = '
    $_SERVER[HTTP_USER_AGENT]'");

    }

    // War der Login erfolgreich, wird dem User der Login-Bereich angezeigt.
    if($_SESSION['logged'] == 1) {
    ... 
    Wisst ihr vielleicht woran das liegen kann???

    mfg
    snatch

  • #2
    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
    3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Die Ausgaben per echo kann man sich ersparen, in dem man einen Debugger benutzt, was eigentlich selbstverständlich sein sollte.

    Und noch ein Tipp: Wenn du Punkt 2 dieser Liste ausführst, wundere dich nicht. PHP haut dir dann nämlich deine schlampige Programmierung heftigst um die Ohren.

    Gruß
    phpfan

    Kommentar


    • #3
      Zitat von phpfan
      Und noch ein Tipp: Wenn du Punkt 2 dieser Liste ausführst, wundere dich nicht. PHP haut dir dann nämlich deine schlampige Programmierung heftigst um die Ohren.
      Was ist denn nicht schlampig programmierter Code?
      Würde ich gerne mal sehen... ...vielleicht kann ich da ja was lernen.

      Kommentar


      • #4
        Dann baue error_reporting(E_ALL); ein und du wirst es sehen!

        Und ordentlich Einrücken würde die Sache lesbarer machen.

        Gruß
        phpfan

        Kommentar


        • #5
          Wo ist dein session_start()?

          Bitte mal mehr Kommentare im Code, ich blick nicht durch.

          Kommentar


          • #6
            Zitat von Zergling
            Bitte mal mehr Kommentare im Code, ich blick nicht durch.
            Habe jetzt den Code kommentiert.

            Außerdem habe ich error_reporting(E_ALL); eingesetzt und konnte bis auf folgende Fehler alle beseitigen:

            Code:
            Notice: Undefined index:
            
            Dieser Fehler taucht in folgenden Zeilen auf:
            
            $username = $useful->mysql_escape($_POST['admin_user']);
            $passwort = $useful->mysql_escape($_POST['admin_pass']);
            $klick_login = $useful->mysql_escape($_POST['admin_login']);
            Code:
            Notice: Use of undefined constant id - assumed
            
            Dieser Fehler taucht in folgenden Zeilen auf:
            
            $navigation[] = array(id => $row_navi['navi_id'],
                                  name => $row_navi['bezeichnung'],
                                  link => 'index.php?n='.$row_navi['navi_id'].'&f='.$row_navi['father_id'].'&'.SID);
            Code:
            Fatal error: Cannot use string offset as an array in
            
            Dieser Fehler taucht in folgender Zeile auf:
            
            if($row_navi['navi_id'] == $unavi[0]['father_id']) {
            Könntet ihr mir da eine evtl. weiter helfen?

            Kommentar


            • #7
              Code 1:
              "Undefined index" heißt, dass du auf ein Array-Element zugreifst, dass es nicht gibt. Offenbar $_POST['admin_user'] etc.
              Prüfe vorher mit isset($_POST['admin_user']) ob die Variable existiert. Wenn nicht musst du sehen, was dein Script dann anstellen soll (Default-Wert setzen, ignorieren, ..was du möchtest).

              Code 2:
              array(id =>
              es muss heißen
              array('id' =>
              siehe http://de.php.net/manual/en/language...es.array.donts

              Code 3:
              "Cannot use string offset as an array"
              Der Fehler tritt auf, wenn du eine Variable, die ein String ist, wie einen Array behandelst. Entweder $row_navi oder $unavi ist demnach ein String und kein Array. Welcher kannst du mit var_dump() herausfinden.

              Kommentar


              • #8
                ok, die ersten beiden fehler hab ich nun auch weg bekommen.
                aber der letzte macht mir noch zu schaffen. so wie ich das nämlich sehe sind beide variablen arrays.

                hier der code mit dem sie gefüllt werden:
                PHP-Code:
                while($row_navi mysql_fetch_array($sel_navi)) {
                while(
                $row_unavi mysql_fetch_array($sel_unavi)) {
                if(
                $row_unavi[bezeichnung] <> NULL) {
                $unavi[] = array(id => $row_unavi[navi_id],
                                 
                name => $row_unavi[bezeichnung],
                                                 
                link => 'index.php?n='.$row_unavi[navi_id],
                                                 
                father_id => $row_unavi[father_id]);
                }
                }
                $unavi_count count($unavi);

                $navigation[] = array('id' => $row_navi['navi_id'],
                                      
                'name' => $row_navi['bezeichnung'],
                                                            
                'link' => 'index.php?n='.$row_navi['navi_id'].'&f='.$row_navi['father_id'].'&'.SID);

                // Hier entsteht der Fehler
                if($row_navi['navi_id'] == $unavi[0]['father_id']) {
                for(
                $i=0$i<$unavi_count$i++) {
                $navigation[] = array('id' => $unavi[$i]['id'],
                                      
                'name' => $unavi[$i]['name'],
                                                            
                'link' => $unavi[$i]['link'].'&f='.$unavi[$i]['father_id'].'&'.SID,
                                                            
                'bild' => '[img]images/menu_punkt.png[/img] ');
                }
                }

                ich wüsste jetzt nicht was ich da ändern müsste...

                Kommentar


                • #9
                  Es ist aber entscheidend wie PHP es sieht.
                  var_dump() und dann Posting von phpfan abarbeiten.

                  Wenn alles rund läuft kommen wir erst zum Hauptproblem - wenn es sich dadurch (sauberes Programmieren mit E_ALL) nicht schon gelöst hat

                  Kommentar


                  • #10
                    also, ich habe jetzt alle fehler beseitigt... und es geht.
                    error_reporting(E_ALL); bringts wirklich total!

                    die beiden arrays die probleme gemacht haben, habe ich einfach als array definiert.
                    also beide so

                    $unavi = array();
                    $row_navi = array();

                    und danach ist der fehler verschwunden..

                    danke für die hilfe und die tips zum saubren programmieren!

                    mfg snatch

                    Kommentar


                    • #11
                      Re: Session läuft sofort ab

                      Zitat von snatch-ic
                      ich habe ein Loginsystem geschrieben das auf Sessions basiert.
                      Das macht jeder mal...

                      Nach dem ich das System auf meinem PC getestet habe und auch alles funktioniert, habe ich es ins Web geladen.
                      Äh... Du hast zu Hause die komplette und identische Produktionsumgebung nachgebastelt?

                      Hier der erwünschte Code:
                      1. Wo bleibt der Link auf Dein phpinfo bzw. der Post Deiner Sessionconfig?
                      2. Wie stellst Du sicher, daß die Session übergeben wird?
                      3. bezüglich Deines DB Designs möchte ich Dich behutsam mal auf den Datentyp SET hinweisen, der alles sehr vereinfachen würde.

                      [viel Quelltext, aber kein Formular] Wisst ihr vielleicht woran das liegen kann???
                      Was liegt woran? Das fängt an beim vergessen Fallback und hört auf beim falschen Spaltenformat für das Paßwort auf...

                      Kommentar


                      • #12
                        hallo, komischer weise funktioniert es auf einmal nicht mehr.
                        ich weis leider nicht mehr was ich da machen kann/soll?
                        habe mit error_reporting(E_ALL); so gut wie alle erorrs raus genommen. es sind zwar noch 4 übrig geblieben aber bei denen weis ich leider auch keine lösung.
                        also, das problem ist nun nach einer kurzen zeit in der es funktioniert hat wieder das selbe wie am anfang.
                        habt ihr vielleicht eine idee woran das liegen kann?

                        ich habe den aktuellen quellcode in den opener rein geschrieben.
                        habe in quasi aktualisiert...

                        mfg snatch

                        Kommentar


                        • #13
                          Zitat von snatch-ic
                          habe mit error_reporting(E_ALL); so gut wie alle erorrs raus genommen. es sind zwar noch 4 übrig geblieben aber bei denen weis ich leider auch keine lösung.
                          Wenn du uns diese Fehler vorenthälst, können wir dir auch nicht sagen, ob diese Meldung möglicherweise für dein Problem relevant sind.

                          Kommentar


                          • #14
                            jap, du hast recht. gestern abend hab ich nicht mehr so weit gedacht...
                            es ist mehrmal der gleiche feher gewesen weil diese zeile in einer schleife steckt.
                            hier is er:

                            Code:
                            Notice: Undefined offset: 0 in F:\xampp\htdocs\wga\admin\index.php on line 136
                            in und um line 136 ist folgendes zu finden:
                            PHP-Code:
                            if($row_navi['navi_id'] == $unavi[0]['father_id']) {
                            for(
                            $i=0$i<$unavi_count$i++) {
                            $navigation[] = array('id' => $unavi[$i]['id'],
                            'name' => $unavi[$i]['name'],
                            'link' => $unavi[$i]['link'].'&f='.$unavi[$i]['father_id'].'&'.SID,
                            'bild' => '[img]images/menu_punkt.png[/img]');
                            }

                            ich habe den versuch gemacht diese zeilen auszuklammern. der fehler wurde dann natürlich nicht mehr angezeigt jedoch funktioniert hat es trotzdem nicht.

                            gerade eben habe ich aber eine enteckung gemacht die ich nicht ganz deuten kann. ich habe mir einfach mal die $_SESSION mittels var_dump ausgeben lassen. dies habe ich lokal und auf dem webserver gemacht. und ich bekomme unterschiedliche ergebnisse.

                            hier zum vergleich die ersten stellen des $_SESSION-Arrays
                            lokal sieht es so aus:
                            Code:
                            array(9) { ["logged"]=>  int(1) ["user_id"]=>  string(1) "1" ...
                            und auf dem webserver so:
                            Code:
                            array(9) { ["logged"]=>  ∫(1) ["user_id"]=>  &string(1) "1" ...
                            ist das ein fehler? ich habe leider nichts dazu gefunden...

                            mfg
                            snatch

                            Kommentar

                            Lädt...
                            X