sessions verändern

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

  • sessions verändern

    hi leude,

    die session funktioniert soweit. nur wenn sich zwei user nacheinander mit verschiedenen browsern einloggen, wird die session des ersten (des zeitlich zuerst eingeloggten) users mit der des zweiten überschrieben.

    mein login.php sieht so aus:


    PHP-Code:
    <?php 
        session_start
    (); 

        
    error_reporting(E_ALL); 

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

        include (
    'config.php'); 

        
    $db_link mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS); 
        
    mysql_select_db ("user"); 

        
    $sql "SELECT Username, Passwort, UserSession FROM TabUser WHERE Username = '$_POST[username]';"

        
    $userquery mysql_query($sql) OR die(mysql_error()); 

        
    $row mysql_fetch_assoc($userquery); 

        if (
    $row['Username'] == $username AND $row['Passwort'] == $passwort
            { 
             
    header("Location:angemeldet.php"); 
             
    $_SESSION["username"] = $username
             
    $sql="UPDATE TabUser SET UserSession='".session_id()."' WHERE Username = '$_POST[username]';"
             
    mysql_query($sql); 
             } 

        else 
            { 
             
    header("Location:badlogin.html"); 
             } 
    ?>
    wie kann ich nun bei "individuellen" seiten (also seiten, die für jeden user anders aussehen sollen) die sessions unterscheiden lassen?

  • #2
    Re: sessions verändern

    Original geschrieben von tobias82
    die session funktioniert soweit.
    Tut sie?
    nur wenn sich zwei user nacheinander mit verschiedenen browsern einloggen, wird die session des ersten (des zeitlich zuerst eingeloggten) users mit der des zweiten überschrieben.
    Na, dann tut sie wohl nicht, würde ich sagen.

    Finde heraus, warum.
    Wird die Session-ID korrekt übergeben?
    (Per Cookie vermutlich, denn per GET gibst du sie bei den Location-Headern ja explizit nicht mit. Location-Header erfordern übrigens einen absoluten URL, also bessere das bitte aus.)


    Und bei der Login-Abfrage solltest du gleich Username und Passwort prüfen - kommt ein Datensatz zurück, ist er eingeloggt, sonst nicht.
    Stattdessen erst "alle" (einen) Satz zum Usernamen auszulesen, und dann das Passwort anschließend zu vergleichen, ist unperformanter Nonsense.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      dass das der performance nicht dienlich ist, kann ich nachvollziehen. aber da meine kenntnisse was php und mysql betreffen, noch recht jung sind und sich erst mit diesem projekt entwickeln, weiss ich nicht ganz, wie ich das gestalten soll.

      könnte das so aussehen?

      if (mysql_query($sql) == true)
      {
      ...
      }

      joa und ansonsten würde ich doch behaupten, dass es funktioniert. ich habe:

      $_SESSION["username"] = $username;

      erstellt und das wird auf alle seiten weitergereicht. ich kann das auch an jeder beliebigen stelle einbauen. wie z.b. ein hallo $username, wenn der login erfolgreich war. logge ich mich dann aber mit nem zweiten browser als andren user ein, kann ich im ersten browser nicht mehr als der ursprüngliche user "arbeiten", sondern bin fortan der user, der sich gerade im zweiten browser eingeloggt hat...

      die speicherung der SID habe ich übrigens wieder rausgenommen, da sonst der $username nicht mehr weitergereicht wird.

      Kommentar


      • #4
        Original geschrieben von tobias82
        joa und ansonsten würde ich doch behaupten, dass es funktioniert.
        Gut, dann sagen wir, es funktioniert, und definieren das
        logge ich mich dann aber mit nem zweiten browser als andren user ein, kann ich im ersten browser nicht mehr als der ursprüngliche user "arbeiten", sondern bin fortan der user, der sich gerade im zweiten browser eingeloggt hat...
        als das gewünschte Verhalten, soll mir recht sein.
        die speicherung der SID habe ich übrigens wieder rausgenommen, da sonst der $username nicht mehr weitergereicht wird.
        Irgendwie werden deine Problembeschreibungen nicht aussagekräftgier.

        Ein wenig mehr Beschäftigung mit den Grundlagen wäre wohl anzuraten.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          dann versuche ich mich nochmals in einer aussagekräftigen problembeschreibung:

          meine session ids werden grundsätzlich überschrieben.

          auf jeder seite, die nur für eingeloggte zur verfügung steht, befindet sich ein:

          <?php
          session_start();
          echo $_SESSION["username"];
          ?>

          vor dem html code. daraufhin wird mit immer korrekterweise der username zu testzwecken ausgegeben.

          und genau an dieser stelle würde ich mir gerne die session id aussuchen können, sodass eben nicht der aktuelle username also inhalt der globalen variablen $_SESSION mit einem andren überschrieben wird, der da eigentlich gar nichts verloren hat.

          besser so?

          Kommentar


          • #6
            Original geschrieben von tobias82
            meine session ids werden grundsätzlich überschrieben.
            Dann überprüfe, warum dies passiert.
            und genau an dieser stelle würde ich mir gerne die session id aussuchen können
            Wenn die Übergabe der Session-ID korrekt geklappt hätte, dann müsstest du gar nichts "aussuchen" (was im übrigen auch kaum geht, und auch nicht dem Sinn von Session entspräche, wenn du die richtige Session-Datei selber "heraussuchen" müsstest).
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              wenn ich wüsste wo ich prüfen sollte und was ich evtl. verändern müsste nachdem ich bei der prüfung einen fehler gefunden hätte würde ich mich nicht in diesem forum aufhalten!

              wenn du mir nicht weiterhelfen kannst oder willst, dann lass es. vielleicht gibts noch jemand andren, der ein ähnliches problem bereits hatte und mich in die richtige richtung schieben kann!

              Kommentar


              • #8
                Ich glaube, du hast was falsch (jedenfalls noch nicht richtig) verstanden.

                Wenn User A die Seite öffnet, wird für ihn eine Session erzeugt oder fortgeführt.
                Bewegt sich zur gleichen Zeit ein User B auf der Seite, hat er eine eigene Session, d.h. seine Werte können niemals* plötzlich in der Umgebung von User A auftauchen oder umgekehrt.

                Der PHP Session Handler achtet tunlichst darauf, dass Sessions schön getrennt bleiben, alles andere wäre nämlich kreuzgefährlich (Stichwort Webshop).

                Wenn deine Sessions sich gegenseitig die Werte überschreiben, dann muß das an dir liegen.


                Nochmal zu der Art, wie du die DB nutzt: Performance hin oder her, so wie du es machst, ist dein Login nicht sicher! Überleg dir mal, was dein UPDATE dann macht, sobald es einen Usernamen mehrmals gibt.

                Andere Sache: Wieso willst du eigentlich die SID in der DB haben?


                *) Ausnahme: Man programmiert es absichtlich anders.

                Kommentar


                • #9
                  einen username kann es nicht mehrmals geben. das schliesse ich durch eine eindeutige prüfung (auch gross und kleinschreibung sind berücksichtigt) bei der registrierung aus.

                  die sid wollte ich der db übergeben, da ich dachte, wenn die immer überschrieben wird könnte es vielleicht eine möglichkeit geben, sie zwischenzuspeichern, um exakt diese später wieder aufrufen zu können...hat dann aber auch nicht geklappt...

                  hier die seite, die sich nach dem login öffnet. an dieser stelle wird die sid bereits überschrieben:


                  PHP-Code:
                  <?php
                  session_start
                  ();
                  echo 
                  $_SESSION["username"];
                  ?>
                  <html>
                  <head>
                  <title>Hattipp</title>
                  <meta name="description" content="Hattipp">
                  <meta name="author" content="Tobias">
                  <meta name="keywords" content="Hattipp">
                  <link rel="stylesheet" type="text/css" href="site.css">
                  <link rel="stylesheet" type="text/css" href="links.css">
                  <link rel="stylesheet" type="text/css" href="text.css">

                  <!--[if IE]>
                  <link rel="stylesheet" type="text/css" href="siteie.css">
                  <link rel="stylesheet" type="text/css" href="linksie.css">
                  <link rel="stylesheet" type="text/css" href="textie.css">
                  <![endif]-->

                  </head>
                  <body>

                      <div id="site">

                      <div id="header">
                               <span class="headerlogo">Hattipp</span>
                      </div>

                           <div id="current">
                               Home
                           </div>

                      <div id="mainmenu">
                               <div id="headertext">Men&uuml;</div>
                                   <div id="menulink">
                                           <a href="meinhattipp.php">Mein Hattipp</a>
                                       <a href="wetten.php">Wetten</a><br>
                                           <a href="ranking.php">Ranking</a><br>
                                           <a href="hilfe.php">Hilfe</a><br>
                                           <a href="http://www.hattrick.org" target="_blank" title="hattrick">Hattrick</a>
                                   </div>

                      </div>

                      <div id="loginmenu">
                               <div id="headertext">Login</div>
                                   <div id="loginform">
                                           <span id="menulink"><a href="logout.php">Ausloggen</a></span>
                                   </div>

                      </div>

                      <div id="main">
                               <h1>Willkommen <?php echo $_SESSION["username"]; ?>!</h1>
                                   <p>
                                   Angemeldet
                                   </p>
                      </div>

                  </div>


                  </body>
                  </html>
                  da muss ich wohl ganz oben bei der sessionübergabe irgendeinen fehler drin haben...??!!

                  danke für die hilfe!

                  Kommentar


                  • #10
                    mach doch ne Abfrage ob das Login erfolgreich war.

                    wenn Login ok war, dan $_SESSION['loggedin'] = "ok";



                    im anderen Script:
                    PHP-Code:
                    if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] = "ok")
                             {
                              echo 
                    "Hallo ".$_SESSION['username'];
                              }
                    else
                             {
                             echo 
                    "Sie müssen sich einloggen um diesen Bereich zu betreten.";
                               
                    // und hier zur Fehlerseite weiterleiten (header Location) und dann exit;
                              

                    Diese Abfrage kannst Du AUCH in Deinem login-Script ganz am Anfang
                    (nach session_start) einfügen, damit sich niemand doppelt einloggen kann.

                    Kommentar


                    • #11
                      das wäre ne sache, die ich später noch einbauen könnte. mein vorrangiges problem ist aber ein andres:

                      meine session wird immer dann überschrieben, wenn ich ein zweites browserfenster öffne und mich (egal ob ein neuer user oder derselbe) dort einlogge. bin ich als derselbe user angemeldet und logge mich dann dort wieder aus, bin ich auch im 1. fenster ausgeloggt. bin ich als neuer user angemeldet und mache im 1. fenster als zuvor angemeldeter andrer user eine neue "individuelle" seite auf, so bin ich dort ab sofort auch der neue user des 2. fensters, obwohl der ja eigentlich dort gar nix verloren hat.

                      es scheint also immer nur eine session zu existieren. egal wieviele browserfenster und user und und und gleichzeitig geöffnet sind.

                      könnte es auch daran liegen, dass ich mit xampp arbeite und das ganze noch nicht online gestellt habe?

                      danke nochmals für die hilfe!

                      Kommentar


                      • #12
                        Original geschrieben von tobias82
                        meine session wird immer dann überschrieben, wenn ich ein zweites browserfenster öffne und mich (egal ob ein neuer user oder derselbe) dort einlogge.
                        Das dürfte daran liegen, dass du dort noch in der selben Browserinstanz arbeitest, und dort somit auch das Session-Cookie existiert.

                        Das Thema habe ich erst letzte Tage ausführlich erklärt, http://www.php-resource.de/forum/sho...threadid=68513
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          JUHU! ich bin dir zu tiefstem dank verpflichtet! waren natürlich immer firefox fenster. einmal ein IE fenster benutzt und gleichzeitig ein ff und schon war das problem nicht mehr da. heisst also, dass jemand auf nem andren rechner zwar auch ff benutzen darf, aber da die session nur bei ihm gespeichert wird, machts wiederum nix, right?

                          und wenn ers nich in nem cookie ablegt, weil gesperrt, dann gehts doch auf den server oder? und dort kann ers dann weiterhin unterscheiden?

                          danke!

                          Kommentar


                          • #14
                            Original geschrieben von tobias82
                            aber da die session nur bei ihm gespeichert wird, machts wiederum nix, right?
                            Nein, false.
                            und wenn ers nich in nem cookie ablegt, weil gesperrt, dann gehts doch auf den server oder?
                            Die Session-Daten werden überhaupt nicht auf dem Client abgespeichert, sondern ausschließlich auf dem Server.
                            Lediglich die Session-ID muss (mindestens ein mal) zum Client übertragen werden, und von diesem bei jeder Anfrage an den Server wieder mitgegeben werden, damit dieser seine Session-Daten dem richtigen Client wieder zuordnen kann.



                            OffTopic:
                            Immer wieder erstaunlich, wie viele Leute mit Sessions herumspielen, noch bevor sie deren Theorie auch nur halbwegs verstanden haben.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar

                            Lädt...
                            X