Mehrere User gleichzeitig eingeloggt

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

  • Mehrere User gleichzeitig eingeloggt

    Hallo, folgendes Problem.
    Auf meiner Seite müssen sich User einloggen.

    Also hab ich ein Loginskript gebastelt was lokal super klappt.
    Nu ist das Ding im Web und ich hab den Salat ^^

    UserA loggt sich ein, alles prima.
    User B loggt sich ein und ihm wird angezeigt, dass er UserA ist.

    Getestet habe ich das im LAN sowie über Internet.
    Irgendwo ist der Haken bei den SESSIONs drin.

    Hier der Code für den Loginbereich:

    PHP-Code:
    session_start(); 
    Steht halt ganz oben.

    Dann kommen die Formularfelder wo man halt Username und Passwort einträgt.
    Das wird ausgewertet und am Ende kommt dann:

    PHP-Code:
    $_SESSION['user'] = $result['username']; 
    Angezeigt wird auf jeder Seite im Footer das hier:

    PHP-Code:
    if(!isset( $_SESSION['user'] ))
        echo 
    "Gast";
    elseif(
    $_SESSION['user']=="")
        echo 
    "Gast";
    else
        echo 
    $_SESSION['user']; 
    Wie gesagt klappt das super mit einem User. Er kommt auch nur dahin wo er hindarf usw.
    NUr wenn sich nun halt ein User anmeldet von seinem Rechner und ich mich vorher z.B. als Admin eingeloggt habe, wird ihm mein Name nach dem Login angezeigt und er hat natürlich auch den Adminstatus, was ja irgendwie schon bissle doof ist.

    Das komische ist, wenn ich jetzt eingeloggt bin und der zweite User auf die Seite geht wird er als Gast angezeigt.
    Erst wenn er sich einloggt, wird ihm mein Benutzername angezeigt.

    Sicherlich irgendwas banales, aber ich komme nicht dadrauf.

    Auf dem Server benutzt wird
    PHP Version 4.4.2

  • #2
    hast Du das mit verschiedenen Rechnern geprüft?

    Also Admin und Gast auf jeweils einem Rechner?

    Könnte ja sein, daß die Session noch nicht beendet war.


    Wie prüfst Du denn Usernamen und PW?

    Kommentar


    • #3
      So ich verzweifel gerade.

      Also erstmal die neuen Erkenntnisse:

      UserA ist Rang "Admin", UserB ist Rang "User"

      UserA loggt sich ein bekommt eine Session ID zugeteilt.
      Loggt sich aus. Die Session wird zerstört.
      Hab ich überprüft. Die ist wirklich leer.

      UserB loggt sich woanders ein. Also von einem anderen Rechner.
      Bekommt eine andere Session ID zugeteilt.
      Ganz kurz steht im Footer "Eingeloggt als UserB". Reload, zack "Eingeloggt als UserA".
      Komischerweise hat er aber den Rang "User". Also den richtigen Rang. Er kann nicht in den Admin Bereich.
      Das gleiche Spiel übrigens geht auch prima an einem Rechner.
      Sprich ich logg mich mit UserA ein. Logge mich aus. Logge mich mit UserB ein, es wird kurz UserB angezeigt dann wieder UserA und ich bin trotzdem vom Rang "User".
      Aber wo nimmt er den UserA-Namen her. Die Sessionvariable ist ja nach dem Ausloggen leer.
      Mit dem Rang der auch in der Session gespeichert wird klappt es ja wunderbar.
      Es ist auch egal, ob UserC und UserD sich anmelden. Es wird immer nur UserA angezeigt obwohl sie es vom Rang her nicht sind.
      UserA ist übringens der erste User mit dem ich mich angemeldet hab, seit die Seite online ist.

      Es ist echt unfassbar, woher er den Username holt.
      Aus der Sessionvariable schonmal nicht, weil die schön gelöscht wird, wie gewollt.
      Zumal er sogar kurz den richtigen Usernamen anzeigt und sofort auf den UserA-Usernamen wechselt.

      *edit*
      So bei genauerer Betrachtung der Seite stelle ich verblüffendes fest:
      Ich logge mich als irgendein UserB-Z ein.
      Er geht zurück auf die Index.php (soll er ja) unten steht eingeloggt als UserB-Z. Dann reloadet er automatisch,wohlgemerkt automatisch und es steht wieder UserA da.
      WIeso hat das Ding ein Eigenleben und reloadet?
      Zuletzt geändert von H8c0re; 11.05.2006, 00:02.

      Kommentar


      • #4
        sieht so aus wie wenn die Daten aus dem Browsercache kommen.

        Leer ihn doch mal und starte den Browser neu.

        Außerdem wär es immer noch hilfreich zu wissen,
        wie Du die Eingaben vergleichst.

        und:

        mach mal die Abfrage ob eingeloggt VOR das Formular.
        Zuletzt geändert von Koala; 11.05.2006, 00:01.

        Kommentar


        • #5
          Browsercache leeren und Browser neustarten bringt nichts.
          Würde ja auch nicht erklären, warum der Username UserA bei den beiden Browser von den zwei Testrechner auch angezeigt wird.

          Hier die Loginabfrage:
          PHP-Code:
              <?php 
              
          if(!isset($_POST['submit'])) 
              { 
          ?>
                  <form action="<?php $PHP_SELF ?>" method="post">
                  <table width="400" bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" align="center">
                      <tr>
                      <td bgcolor="#e7e7e7" align="center" colspan="2">
                      <b>Bitte einloggen</b>
                      </td>
                  </tr>
                  <tr>
                      <td width="170" bgcolor="#e7e7e7">Benutzername</td>
                      <td width="230" bgcolor="#ffffff"><input type="text" name="username" size="20" class="input"></td>
                  </tr>
                  <tr>
                      <td width="170" bgcolor="#e7e7e7">Passwort</td>
                      <td width="230" bgcolor="#ffffff"><input type="password" name="password" size="20" class="input"></td>
                  </tr>
                  <tr>
                      <td bgcolor="#e7e7e7" align="center" colspan="2">
                      <input type="submit" name="submit" value="Anmelden" class="button">
                  </td>
                  </tr>
                  </table>
                  </form>
                  <?php
              
          }
              elseif(!isset(
          $_POST['username']) || $_POST['username'] == ""
              {
                  echo 
          '<p align="center">Bitte geben sie ihren Namen an<br><br><a href="login.php">Zur&uuml;ck</a></p>';
              }
              elseif(!
          $_POST['password'] || $_POST['password'] == ""
              {
                  echo 
          '<form action="login.php" method="post">';
                  echo 
          '<p align="center">Bitte geben sie ihr Passwort an<br><br>';
                  
          //echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
                  
          echo '<input type="submit" name="zurueck" value="Zur&uuml;ck">';
                  echo 
          '</p>';
                  echo 
          '</form>';
              }
              else
              {
                  
          mysqlconnect(); 
                  
          //$password = md5($password);
                  
          $query = @mysql_query("SELECT username, passwort, status FROM login WHERE username = '".$_POST['username']."'") or die('Select ist fehlgeschlagen!');
                  
          $result = @mysql_fetch_array($query) or die('<p align="center">Sorry, aber dieser Benutzername existiert nicht!<br><a href="login.php">Zur&uuml;ck</a></p>');
                  if(
          $_POST['password'] != $result['passwort'])
                  {
                      echo 
          '<form action="login.php" method="post">';
                      echo 
          '<p align="center">Sorry, aber das Passwort ist falsch!<br><br>';
                      echo 
          '<input type="hidden" name="username" value="'.$_POST['username'].'">';
                      echo 
          '<input type="submit" name="zurueck" value="Zur&uuml;ck"></p>';
                      echo 
          '</form>';
                      die;
                  }
                  else
                  {
                      
          $_SESSION['user'] = $result['username'];
                      
          $_SESSION['status'] = $result['status'];
                      echo 
          "<meta http-equiv=\"refresh\" content=\"0; url=index.php\">";
                  }
              }

          Kommentar


          • #6
            was macht denn der meta refresh im Script?

            wieso unterdrückst Du die Fehlermeldungen mit @?

            Dein Script ist unsicher in Bezug auf mysql-injections.

            Kommentar


            • #7
              AHhhhhhhhhh das wird immer geiler.

              Hab mir jetzt auf der IndexSeite per

              PHP-Code:
              <?php var_dump($_SESSION); ?>
              den Sessioninhalt ausgeben lassen.

              Und hey wunder, er gibt

              array(2) { ["user"]=> &string(4) "UserB" ["status"]=> &string(9) "rang_user" }
              aus.

              Also ist in der Session der richtige Username drin.

              Nur anzeigen tut er trotzdem UserA.

              PHP-Code:
                      if(!isset( $_SESSION['user'] ))
                          echo 
              "Gast";
                      elseif(
              $_SESSION['user']=="")
                          echo 
              "Gast";
                      else
                          echo 
              $_SESSION['user']; 
              ist nochmal die Ausgabe des Footers.

              Krank

              Kommentar


              • #8
                Jo diese Sachen werden noch geändert keine Angst.

                Das Problem ansich wird jedoch immer komischer.
                Nach dem Login wird mir ja angezeigt:

                array(2) { ["user"]=> &string(4) "UserB" ["status"]=> &string(9) "rang_user" }
                Wenn ich die Seite reloade wird wie von Geisterhand wieder

                array(2) { ["user"]=> &string(4) "UserA" ["status"]=> &string(9) "rang_user" }
                angezeigt.

                Sprich der Rang bleibt gleich, den User ändert er vonselbst.

                Kommentar


                • #9
                  was ist das für ne Syntax:

                  PHP-Code:
                     if(!isset( $_SESSION['user'] ))
                                  echo 
                  "Gast";
                              elseif(
                  $_SESSION['user']=="")
                                  echo 
                  "Gast";
                              else
                                  echo 
                  $_SESSION['user']; 
                  mach mal error_reporting(E_ALL); an den
                  Anfang des Scripts.

                  Ist Dein Footer in einem Frame ?
                  Zuletzt geändert von Koala; 11.05.2006, 00:32.

                  Kommentar


                  • #10
                    Gibt mir nix aus.
                    Nee ich verwende CSS um Header, Menue, Main und Footer zu platzieren. Keine Frames.

                    Zu der Syntax, Sicherheit usw. Ich programmiere meist alles wild runter, bis es läuft und dann kommt der Feinschliff, also bitte nicht dadran verzweifeln.
                    Zuletzt geändert von H8c0re; 11.05.2006, 00:41.

                    Kommentar


                    • #11
                      mach mal den meta refresh raus.

                      Kommentar


                      • #12
                        session_start() kommt nirgendswo vor.

                        Kommentar


                        • #13
                          Er ist raus und es klappt.
                          Jetzt musste mir aber helfen. Was wie wo warum?

                          Der metarefresh war doch in der Login.php drin und hat doch nur die Indexseite aufgerufen oder nicht. oO

                          Kommentar


                          • #14
                            mit dem meta refresh hast du die Seite erneut angefordert
                            (reload) und eventuell die POST-Daten erneut übermittelt.

                            egal - jetzt gehts ja.

                            aber grundsätzlich ist der Aufbau des Scripts nicht gut.

                            Besser:

                            POST-Abfrage mit if isset

                            Eingaben prüfen

                            wenn ok -> weiterleiten

                            wenn nicht ok -> Fehler anzeigen und Formular anzeigen

                            Kommentar


                            • #15
                              Alles klar,vielen vielen Dank schonmal.

                              Hab mal auch nach Injektions gegooglet, ist ja krass was man da alles anstellen kann.

                              Bietet z.B. mysql_real_escape_string ausreichenden Schutz?

                              Kommentar

                              Lädt...
                              X