Session Variable nicht vorhanden

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

  • Session Variable nicht vorhanden

    Hallo zusammen,

    sorry erstmal, das es der 101 Beitrag zum Thema ist . Ich hab nur leider nichts gefunden was mir hilft.

    Also folgendes:
    Ich habe einen geschützen Bereich, für den man sich anmelden un registrieren muss. Auf den geschützten Seiten wird immer überprüft, ob eine gewisse Session Variable gesetzt ist, nämlich $_Session['login']. Allerdings wird diese Variable nie gesetzt. Hier mal der Code damit Ihr es evtl. finden könnt.

    index.php
    PHP-Code:
    <?
    session_start();
    session_name(pageID);
    setcookie(session_name(),session_id());
    ?>
        <form method="POST" action="log_auswerten.php">
        <table align="center">
            <tr>
                <td class="size">Benutzername:</td>
                <td><input type="text" name="bname"></td>
            </tr>
            <tr>
                <td class="size">Passwort:</td>
                <td><input type="password" name="pwd"></td>
            </tr>
            <tr>
                <td><input type="submit" value="Anmelden" name="anmelden"></td>
            </tr>        
        </table>
        </form>
    log_auswerten.php
    PHP-Code:
    <?
    include ('config.php');
    include ('function/check_login.func.php');

    check_login($_POST['bname'], md5($_POST['pwd']));
    ?>
    check_login.func.php
    PHP-Code:
    <?
    function check_login($user, $pwd) {
        $sql = sprintf("Select `id`, `bname` FROM `spieler` WHERE 
    bname= '%s' AND pwd = '%s'", mysql_real_escape_string($user), mysql_real_escape_string($pwd));
        $query = mysql_query($sql) OR DIE (mysql_error());
        $ip = $_SERVER['REMOTE_ADDR'];
        
        if (mysql_numrows($query) == 1) {
            header("Location: blabla");
            sprintf(mysql_query("UPDATE spieler SET ip = '".$ip."' WHERE 
    spieler.bname = '%s'", mysql_real_escape_string($user)) or Die (mysql_error()));
            $result = mysql_fetch_assoc($query); 
            $_SESSION['login'] = $result['bname'];
            exit;
        } else {
            header("Location: blablub");
        }
    }
    ?>
    logged.func.php für die geschützen Seiten
    PHP-Code:
    <?
    function logged($login) {
        if (!(isset($login))) {
            header("Location: blabla");
        }
    }
    ?>
    Auf den Seiten die geschützt werden sollen steht dann auch immer wieder
    PHP-Code:
    <?
    session_start();
    include('function/logged.func.php');
    logged($_SESSION['login']);
    ?>

  • #2
    Was soll das denn?
    PHP-Code:
    session_start();
    session_name(pageID);
    setcookie(session_name(),session_id()); 
    Einfach nur session_start() reicht doch völlig

    Und wenn du da wirklich was einstellen willst, dann solltest du vorher noch mal ins Handbuch schauen.

    PS:
    Die IP kannste auch vergessen!
    Wir werden alle sterben

    Kommentar


    • #3
      ok, hast recht session_start() reicht. aber wo ist jetzt der fehler?

      Kommentar


      • #4
        Dieses ist z.B. sehr verdächtig: sprintf(mysql_query("U.....

        Die ganzen Locationheader lass doch erstmal weg. Die brauchst du nicht wirklich. Include ist da bestimmt viel angemessener.

        Das Ganze ist sehr unaufgeräumt...

        Und setze mal:
        PHP-Code:
        error_reporting(E_ALL);
        ini_set('display_errors'TRUE); 
        an den Anfang der Scripte.
        Wir werden alle sterben

        Kommentar


        • #5
          er gibt mir dann das aus:

          PHP-Code:
          NoticeUndefined indexlogin in /mnt/web6/20/86/51648986/htdocs/projects/tippspiel/index1.php on line 4 
          in der datei steht folgendes:
          PHP-Code:
          <?
          session_start();
          include('function/logged.func.php');
          logged($_SESSION['login']);
          ?>
          Das bedeutet doch, das die Variable Index für die Session nicht gesetzt ist oder?

          Kommentar


          • #6
            Genau!
            Wir werden alle sterben

            Kommentar


            • #7
              ja aber wieso? ich hab die doch mit
              PHP-Code:
              $_SESSION['login'] = $result['bname']; 
              gesetzt oder nicht?

              Kommentar


              • #8
                Kommt es denn überhaupt bis zu dem Punkt?
                Ist es denn danach noch die gleiche Session?

                Du solltest mehr Kontrollausgaben machen!
                Sonst siehst du ja nicht was passiert.
                Wir werden alle sterben

                Kommentar


                • #9
                  also ich hab es jetzt so verbessert, und die Variable ist zumindest im selben script gesetzt:

                  PHP-Code:
                  function check_login($user$pwd) {

                      
                  $sql sprintf("Select `id`, `bname` FROM `spieler` WHERE 
                  bname= '%s' AND pwd = '%s'"

                  mysql_real_escape_string($user), 
                  mysql_real_escape_string($pwd));
                      
                  $query mysql_query($sql) OR DIE (mysql_error());
                      
                  $ip $_SERVER['REMOTE_ADDR'];
                      
                      if (
                  mysql_numrows($query) == 1) {
                          
                  header("Location: blabla");
                          
                  $query1 sprintf("UPDATE spieler SET ip = '".$ip."' 
                  WHERE spieler.bname = '%s'"
                  mysql_real_escape_string($user) or Die (mysql_error()));
                          
                  mysql_query($query1);
                          
                  $result mysql_fetch_assoc($query); 
                          
                  $_SESSION['login'] = $result['bname'];
                      } else {
                          
                  header("Location: blabla");
                      }

                  allerdings ist die Variable im nächsten script nicht mehr vorhanden.

                  Kommentar


                  • #10
                    ok, jetzt klappts... hab aber keine ahnung warum
                    Zuletzt geändert von nevermind; 01.06.2008, 23:22.

                    Kommentar


                    • #11
                      das verstehe ich aber auch nicht, denn wenn numrows == 1 dann hat er die weiterleitung gemacht und erst danach schreibt er das $_SESSION... also müsste der nicht eigentlich auf die Seite weiterleiten und alles was unten drunter steht ist denn egal?!

                      Kommentar


                      • #12
                        Nein!
                        Ein LocationHeader wird zum Browser gesendet!
                        Aber nicht das Script beendet.
                        Das würde man z.B. mit extit erreichen.


                        Mir passt sein Script auch nicht. Ein klarer Verstoß gegen das EVA Prinzip.
                        Das wid bestimmt noch öfter Sorgen machen.
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          dann macht doch bitte einen Verbesserungsvorschlag. Bin noch ziemlich am Anfang mit dem Thema. Hab nämlich wieder den Fehler mit dem Index 'login'

                          Die Scripte an sich sind aber doch von der Funktionalität in Ordnung oder?

                          Kommentar


                          • #14
                            dann macht doch bitte einen Verbesserungsvorschlag
                            Naja....
                            Einen Code werde ich dir jetzt nicht schreiben.

                            Aber ein paar Tipps kannst du bekommen:
                            Erstmal sollte eine Funktion so benannt werden, dass daraus ihre Funktion klar wird!

                            check_login() sollte also nur prüfen, ob eingeloggt. Eine Rückgabe von TRUE oder FALSE ist angemessen. Wenn "technische" Fehler auftreten, darf noch eine Exception geworfen werden.

                            Du brauchst also (meines Erachtens nach) mindestens 3 Funktionen:[list=1][*]login($username,$passwort) [*]check_login()[*]logout()[/list=1]
                            Zusätzlich ein paar Zugriffsfunktionen auf die Userdaten. KA, welche du da brauchst.

                            Diese kann man schön in einer UserModell Klasse sammeln.

                            Das wird dich fix dazu führen, dass du die Weiterleitungen nicht brauchst.

                            Code:
                            Wenn check_login() dann 
                                    include geheimeseite 
                                sonst 
                                    include öffentlicheseite
                            Wir werden alle sterben

                            Kommentar


                            • #15
                              Diese kann man schön in einer UserModell Klasse sammeln.
                              könntest du evtl. ein beispiel dazu geben? Btw. wäre es praktisch, wenn jemand eine idee wegen dem Index Problem hätte. Das Problem ist, das ich ohne die Variable nicht weiter komme, da fast alle anderen Select's diese Variable brauchen

                              gruß
                              christoph

                              Kommentar

                              Lädt...
                              X