Session mal wieder

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

  • Session mal wieder

    Hallo ihr PhP'ler,

    Ich habe mich mal an ein User Login System gewagt und bin auch schon recht weit:
    Testen unter:

    www.zeeus.de/operator.php

    gast
    gast

    Es funzt soweit sogut, aber sobald ich eine neue Seite aufrufe per link und dort die session starte, erstellt er eine neue SessionID!

    Das besondere ist ich habe eine operator.php:

    PHP-Code:
    <?php

    // -- zeeus.de webdesign -- modern art of style and fashion -- //

    session_start();

    include(
    '../phptmp/config.inc.php');
    include(
    '../phptmp/datavars.inc.php');


    echo(
    "<html>\n");
    echo(
    " <head>\n");
    echo(
    " <title>");echo $title; echo("</title>\n");
    echo(
    " </head>\n");
    echo(
    " <body>\n");

    echo(
    "<table style=\"width: 100%\">\n");
    echo(
    " <tr>\n");
    echo(
    " <td colspan=\"2\">\n");
    include(
    "login.php");
    echo(
    " </td>\n");
    echo(
    " </tr>\n");
    echo(
    " <tr>\n");
    echo(
    " <td style=\"width: 200px\">\n");
    include(
    "menue.php");
    echo(
    " </td>\n");
    echo(
    " <td>\n");
    include(
    "../phptmp/link.inc.php");
    echo(
    " </td>\n");
    echo(
    " </tr>\n");
    echo(
    " <tr> \n");
    echo(
    " <td colspan=\"2\">\n");
    include(
    "unten.php");
    echo(
    " </td>\n");
    echo(
    " </tr>\n");
    echo(
    "</table>\n");

    echo(
    " </body>\n");
    echo(
    "</html>\n");
    ?>
    Diese stellt also eine Virtuelle Frametabelle her

    die menue ist die navigationsseite
    die loginseite loggt den user ein

    PHP-Code:
    <? 
    session_start(); 
     
    include('../phptmp/secure.inc.php');

    // -----------------------------------------------------

    if (isset($_POST['login'])) 
     { 
        $userid=check_user($_POST['username'], $_POST['userpass']); 
        if ($userid!=false) 
            login($userid); 
        else 
            echo 'Ihre Anmeldedaten waren nicht korrekt!'; 
     } 
     
    // -----------------------------------------------------

    if (!logged_in()) 
        {
    echo("<form method='post' action='$PHP_SELF'> ");
    echo("<label>Benutzername:</label><input name='username' type='text'> ");
    echo("<br> ");
    echo(" <label>Passwort: </label><input name='userpass' type='password' id='userpass'> ");
    echo("<br> ");
    echo(" <input name='login' type='submit' id='login' value='Einloggen'> ");
    echo("</form>");
         }
         
    // -----------------------------------------------------


    if (logged_in()) 


    $sql="SELECT UserName, UserLevel, UserLogin FROM users WHERE UserSession='".session_id()."'LIMIT 1"; 
    $result= mysql_query($sql); 

         if (mysql_num_rows($result)) { 
        
            $row = mysql_fetch_array($result);
             $UserName = $row['UserName']; 
            $UserLevel = $row['UserLevel']; 
            $UserLogin = $row['UserLogin'];
          } 
          
          
    echo "Benutzername: ".$UserName; 
    echo "<br>";
    echo "Userlevel: ".$UserLevel."<br>"; 
    echo "<br>";
    echo "Dein letzter Login: ".$UserLogin."<br>"; 
    echo "<br>";
    echo("<form method='post' action='logout.php'> ");
    echo(" <input name='abmelden' type='submit' value='abmelden' > ");
    echo("</form>");      
    echo "<hr>"; 
    }
    ?>
    diese holt sich die Functionen und Daten aus der secure.inc.php

    PHP-Code:
    <? 
    function connect() 
    {
      $con=mysql_connect('xxx','xxx','xxx') or die(mysql_error()); 
      mysql_select_db('xxx',$con) or die(mysql_error());
    }


    function check_user($name, $pass) 


        $sql="SELECT UserId, Userlogin, UserSession FROM users WHERE UserName='".$name."' AND UserPass=MD5('".$pass."') LIMIT 1"; 
        $result= mysql_query($sql) 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()."', Userlogin=now() WHERE UserId=".$userid;   
         mysql_query($sql);  
    }
         

    function logout_idle()
    {
      $sql="UPDATE users SET UserSession=NULL WHERE Userlogin < NOW() - INTERVAL 5 MINUTE";
      mysql_query($sql) or die(mysql_error());
    }


    function logged_in() 

        logout_idle();
        $sql="SELECT UserId FROM users WHERE UserSession='".session_id()."' LIMIT 1"; 
        $result= mysql_query($sql); 
          return ( mysql_num_rows($result)==1); 




    function logout() 

        $sql="UPDATE users SET UserSession=NULL WHERE UserSession='".session_id()."'"; 
         mysql_query($sql); 


    connect(); 
    ?>
    So, das funktioniert nun alles, nun zu meinem Problem:

    Über die menue.php(Navigationsseite) lade ich das Control Panel
    control.php

    Dort kann ich keine Daten mehr zum eingeloggten User abfragen, da er mir dort immer eine neue SessionID creiert.. und diese mit der in der DB vergleicht!

    PHP-Code:
    <? 
    session_start();

    include('../phptmp/secure.inc.php');

    // -----------------------------------------------------

    $sql="SELECT Userid, UserName, UserLevel, UserLogin FROM users Where UserSession='".session_id()."' LIMIT 1"; 
    $result= mysql_query($sql); 

         if (mysql_num_rows($result)) { 
        
            $row = mysql_fetch_array($result);
             $UserName = $row['UserName']; 
            $UserLevel = $row['UserLevel']; 
            $UserLogin = $row['UserLogin'];
          } 
          
    echo "Dein Name: ".$UserName; 
    echo "<br>";
    echo "Dein Benutzerlevel: ".$UserLevel."<br>"; 
    echo "<br>";
    echo "Dein letzter Login: ".$UserLogin."<br>"; 
    echo "<br>";
    echo("</form>");      
    echo "<hr>"; 

    ?>
    Ich probiere nun tagelang herum.. möchte die Sid eigentlich nur in der DB haben und nicht per Link mitführen!

    Ich danke schonmal im Voraus
    Mfg Pierre

  • #2
    Kann mir denn keiner helfen?
    Noch anzumerken ist halt das in der "control.php" keine Ausgaben kommen.. :-(

    Kommentar


    • #3
      es gibt hier unzählige threads zu dem thema. warum nimmst du nicht einfach davon einen, liest ihn durch, und behebst dein problem?

      ich denke nicht, dass hier jemand lust hast immer zum thema usermanagement jede woche einen kompletten thread zu füllen. mich eingeschlossen.
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Hi Abraxax,

        ich habe mir gedacht das so etwas kommt!
        Wie ich schrieb habe ich mehrere Tage darauf verwendet und hier alles erlesen!

        Aber speziell in meinem komme ich nciht weiter!

        Kommentar


        • #5
          schaue dir mal mein 'schönes usermanagement' bei den codeschnipseln an.

          es ist einfach und daher auch einfach zu verstehen.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Ich kenne es und habe es wirklich gelesen...
            Nur muss ihc diese Problem hier fertigstellen und kann nciht anderen code nehmen!
            Zudem würde ich gerne verstehen was ich hier falsch mache!
            Mächte auch mal ein so guter Programmierer werden und hoffe einfach auf eure Hilfe um weiterzukommen

            Grüße

            Kommentar


            • #7
              Es funzt soweit sogut, aber sobald ich eine neue Seite aufrufe per link und dort die session starte, erstellt er eine neue SessionID!
              das liegt wahrscheinlich daran das keine sessionid mit übertragen wird.

              her ein passender Link:

              http://de.php.net/manual/de/ref.session.php

              suche dir da die Überschrift: "Übermittlung der Session-ID" und lese dir das da mal durch, dann kommste wahrscheinlich selbst drauf wo es klemmt.
              mfg
              marc75

              <Platz für anderes>

              Kommentar


              • #8
                Ach so...
                Da liegt der Fehler! Ich dachte die SessionId ist dem Browser bekannt solange er nicht geschlossen wird...
                Da ich aber bei der Login.php die Sid speichere und nicht von dort aus weiterlinke sondern von der menue.php müsste ich also beim Login auch die SID global im Cookie reinsetzen...? Also ohne URL weitergabe!?

                Kommentar


                • #9
                  Menue.php

                  PHP-Code:
                  <? session_start();
                  $sid = session_id();
                  ?> 
                  <html>
                  <head>
                  <title><? echo $title ?></title>
                  </head>
                  <Body>

                  <?
                  $sql="SELECT UserLevel FROM users WHERE UserSession='".session_id()."'LIMIT 1"; 
                  $result= mysql_query($sql); 

                       if (mysql_num_rows($result)) { 
                      
                          $row = mysql_fetch_array($result);
                             $UserLevel = $row['UserLevel']; }
                          



                  if ($UserLevel == 25) {

                  echo("<a href='operator.php?PHPSESSID=$sid'>Index</a>");
                  echo("<br>");
                  echo("<a href='operator.php?section=guestbook&?PHPSESSID=$sid'>Admin Panel</a>");
                  echo("<br>");
                  }

                  if ($UserLevel > 0) {
                  echo("<a href='operator.php?section=guestbook&?PHPSESSID=$sid'>Gästebuch</a>");
                  echo("<br>");
                  echo("<a href='operator.php?section=controlpanel&?PHPSESSID=$sid'>Control Panel</a>");
                  }

                  if ($UserLevel == 0) {
                  echo("<a href='operator.php?section=guestbook&?PHPSESSID=$sid'>Gastlink</a>");
                  }


                  ?>
                  Control.php

                  PHP-Code:
                  <? 
                  session_start();
                  $sid = session_id();

                  include('../phptmp/secure.inc.php');

                  // -----------------------------------------------------

                  $sql="SELECT Userid, UserName, UserLevel, UserLogin FROM users Where UserSession='".session_id()."' LIMIT 1"; 
                  $result= mysql_query($sql); 

                       if (mysql_num_rows($result)) { 
                      
                          $row = mysql_fetch_array($result);
                           $UserName = $row['UserName']; 
                          $UserLevel = $row['UserLevel']; 
                          $UserLogin = $row['UserLogin'];
                        } 
                        
                  echo "Dein Name: ".$UserName; 
                  echo "<br>";
                  echo "Dein Benutzerlevel: ".$UserLevel."<br>"; 
                  echo "<br>";
                  echo "Dein letzter Login: ".$UserLogin."<br>"; 
                  echo "<br>";
                  echo("</form>");      
                  echo "<hr>"; 
                  print $sid
                  ?>

                  Mit "print $sid" schau ich mir nun an obs geklappt hat.. nunja es funzt ned...

                  Ich habe immer ncoh so ne Vermutung das das anmeinem Virtuellen Frame liegt...

                  Habt ihr eine Idee?

                  Kommentar


                  • #10
                    Sessions.

                    Hallo,

                    zum Thema Anmeldecode:

                    Ich habe dies folgendermassen gelöst:
                    Beim Login werden die Formulareingaben (User/Pass) mit den Daten
                    in der Userdatenbank verglichen. Wenn OK wird der User angemeldet und "user/pass" in der Session gespeichert (Falls Fehler, wird der User wieder rausgeworfen):

                    session_start();
                    $_SESSION["username"]=$user;
                    $_SESSION["password"]=$pass;
                    $sid=session_id();

                    Die Session ID wird normalerweise per Default and die nächste Seite übermittelt wenn Cookies deaktiviert sind. Dass funktioniert aber z.B. nicht, wenn Dein Code auf einer verlinkten Seite läuft. Sicherer ist die
                    $sid zusätzlich noch zu übergeben in der URL:

                    ....
                    echo "<A HREF='http://www.meineseite.de/aufzurufendes_script.php?sid='.$sid.'>weiter </A>
                    .....

                    Auf allen Seiten hole ich mir die Session ID wieder:

                    $sid=$_REQUEST["sid"];
                    session_start($sid); //damit wird GENAU die session gestartet

                    Zusätzlich wird nun die Authorisierung nochmals auf jeder Seite geprüft.
                    In der session speichere ich noch mehrere Details wie z.B. Anmeldezeit ab. So kann mann z.B. Sitzungen zeitlich begrenzen.

                    ok. Vielleicht hilfts Dir ja.
                    Gruss,
                    Stefan

                    Kommentar


                    • #11
                      Danke schön!

                      Ich habe die Tematik nun endlich genauer verstanden!

                      Aber mein Problem liegt wohl an der Art meiner Seite...

                      Ich habe ja eine operator.php(Index)
                      dort wird die Login includiert, dort wird die SID gesetzt

                      es wird aber in der menue.php(auch in der operator.php geincluded) weiterverlinkt!

                      Ich habe also die Session in der Login, aber nicht in der operator oder der Menue oder Control.php

                      Kommentar


                      • #12
                        Hm?

                        Hi,

                        um ehrlich zu sein, verstehe ich nun Dein Problem nicht (ganz).
                        Geht es nur darum, die sid auch in den anderen Seiten zu haben?
                        Wie man diese übergibt, habe ich in meinem Post beschrieben,
                        hierzu gibt es ausserdem einiges an Literatur, z.B. auf der PHP-Faq
                        Seite (Link hierzu findet sich hier in jeder 2ten post).

                        Oder ist die $sid nicht gefüllt weil du die Codes inkludiert hast?
                        Dass sollte trotzdem gehen, inkludiert heisst ja nur, dass das
                        andere skript auch mit ausgeführt wird.

                        Du weisst aber schon, dass Du z.B. in Funktionen auf Variablen ausserhalb nur über Definition "global $sid;" oder "$Globals['sid']"
                        zugreifen kannst?

                        Vielleicht ist dass ja Dein Problem.

                        Fällt mir gerade noch was ein: Die Session kannst Du ja in jeder anderen Seite auch neu starten mit
                        "session_start($sid)"
                        Sollte auch automatisch erfolgen wenn Du in den Seiten auf
                        das Array "$_SESSION[]" zugreifst, denke ich.
                        Zuletzt geändert von Beyond; 27.01.2004, 23:12.
                        Gruss,
                        Stefan

                        Kommentar


                        • #13
                          Re: Hm?

                          hmm,

                          Sollte auch automatisch erfolgen wenn Du in den Seiten auf
                          das Array "$_SESSION[]" zugreifst, denke ich.
                          kommt drauf an ...

                          Code:
                          ; Initialize session on request startup.
                          session.auto_start = 0
                          interessant ist auch der rest eurer php.ini, zb.
                          Code:
                          ; Whether to use cookies.
                          session.use_cookies = 1
                          würde zb. möglich sein

                          oder
                          Code:
                          ; trans sid support is disabled by default.
                          ; Use of trans sid may risk your users security.
                          ; Use this option with caution.
                          ; - User may send URL contains active session ID
                          ;   to other person via. email/irc/etc.
                          ; - URL that contains active session ID may be stored
                          ;   in publically accessible computer.
                          ; - User may access your site with the same session ID
                          ;   always using URL stored in browser's history or bookmarks.
                          session.use_trans_sid = 1
                          oder
                          Code:
                          ; The URL rewriter will look for URLs in a defined set of HTML tags.
                          ; form/fieldset are special; if you include them here, the rewriter will
                          ; add a hidden <input> field with the info which is otherwise appended
                          ; to URLs.  If you want XHTML conformity, remove the form entry.
                          ; Note that all valid entries require a "=", even if no value follows.
                          url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
                          nur so btw
                          Die Zeit hat ihre Kinder längst gefressen

                          Kommentar

                          Lädt...
                          X