Webdesign in Siegen

Userlogin - $_SESSION[id]

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Userlogin - $_SESSION[id]

Beitragvon =Max= am 06.08.2008, 09:06

Langsam bin ich echt am verzweifeln, bei meinem Userlogin speichere ich die USER ID in $_SESSION[id]. Jetzt wird nach einer Zeit manchmal (nicht immer) die $_SESSION[id] einfach geändert und ich bin nicht mehr User 1 sondern z.b. User 56 und kann seinen Account verwalten.

Wie ist sowas möglich, im Code habe ich keine Stelle gefunden die die Session ID in irgendeiner weiße ändert. Gibt es alternativen zu Sessions?
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Re: Userlogin - $_SESSION[id]

Beitragvon mstrauss am 06.08.2008, 10:46

Hallo Max

Da scheint was in deinem Sessionmangement nicht in Ordnung zu sein. Du kannst ja mal den Quellcode für das Login posten.

Gruß
Markus
Menschen - kleine Säcke aus denkendem Wasser, zusammengehalten von fragilen Kalzium-Ansammlungen.
Terry Pratchett
Benutzeravatar
mstrauss
Mitglied
 
Beiträge: 186
Registriert: 22.10.2005, 14:40
Wohnort: Duisburg

Re: Userlogin - $_SESSION[id]

Beitragvon =Max= am 07.08.2008, 10:50

Der Login sieht folgendermaßen aus:

Code: Alles auswählen
<?php
   if($_SESSION["login"] == false) {
       if(!isset($_POST['username']) && !isset($_POST['password'])) {
      echo '<form name="userlogin" action="" method="post">';
      echo '<img src="images/frank2.gif" style="margin-right: 5px; margin-top: 4px;" align="right" />Username:<br /><input type="text" class="login" name="username"><br />';
      echo 'Passwort:<br /><input type="password" class="login" name="password"><br />';
      echo '<br /><input type="submit" value="Login" class="logins" name="submit">';
echo '</form><br /><a href="index.php?page=37">Registrieren</a><br />';
       } else {
      $username = $_POST['username'];
      $password = md5($_POST['password']);

      $select = mysql_query("SELECT * FROM us_users WHERE user_name = '$username' AND user_pass = '$password'");

      if(mysql_num_rows($select) > 0) {
$rows = mysql_fetch_array($select);
         $_SESSION['login'] = true;
         $_SESSION['id'] = $rows['user_id'];
         $_SESSION['username'] = $rows['user_name'];
         echo '<meta http-equiv="refresh" content="0; url=">';
      } else {
         echo "Username oder Passwort falsch!";
      }
       }
   } else {
      $userdaten = mysql_query("SELECT * FROM us_users WHERE user_id = '$_SESSION[id]'");

      $user = mysql_fetch_array($userdaten);

      echo 'Hallo <b>'.$_SESSION[username].'</b>!<br />';

      // Menü
      $selmenu = mysql_query("SELECT * FROM us_menu WHERE menu_menu = '0' ORDER BY menu_prio");

      while($row = mysql_fetch_assoc($selmenu)) {
         echo '<center><b><u>'.$row[menu_name].'</u></b></center><br />';

         $points = mysql_query("SELECT * FROM us_menu WHERE menu_menu = '$row[menu_id]' ORDER BY menu_prio");

         while($prow = mysql_fetch_assoc($points)) {
            echo '&nbsp;&bull;&nbsp;<a href="'.$prow[menu_link].'">'.$prow[menu_name].'</a><br />';
         }

         echo '<br />';
      }

      // Online Update
      $time = time();

      $update = mysql_query("UPDATE us_users SET user_online = '$time' WHERE user_id = '$_SESSION[id]'");

      if(!$update) {
         echo mysql_error();
      }
   }
?>

Da wird nur beim Login die Session ID zugewiesen
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Re: Userlogin - $_SESSION[id]

Beitragvon =Max= am 07.08.2008, 18:40

Gerade ebend ist mir das schon wieder passiert, das ist echt nervig. Vorallem wenn man dann dem andern User theoretisch "alles kaputt machen kann"
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Re: Userlogin - $_SESSION[id]

Beitragvon Labrar am 07.08.2008, 18:45

es wundert mich dass du keine Fehlermeldungen bekommst.

Ich hab dein Chaos nur kurz überflogen, kann also mal nix über sonstige Fehler in deinem Script sagen. Aber
in jedem Fall muss das
Code: Alles auswählen
session_start();
an den Anfang deines Scriptes und zwar direkt unter
Code: Alles auswählen
<?php


Eine kurze Erklärung gibts natürlich auch :lol:

Um überhaupt auf Sessions zugreifen zu können, oder generell mal welche erstellen, musst du hierfür die SESSIONS mit oben genanntem Befehl starten. Ohne session_start existieren deine SESSIONS nicht. Lass doch mal deine SESSIONS ausgeben.

Edit:

Nach dem ich mir mal die ersten Zeilen deines Codes angesehen habe, finde ich es sowieso quatsch eine SESSION lediglich auf wahr oder falsch abzufragen. Jeder deiner USER ist doch sicher in deiner datenbank mit einer ID gespeichert. Also lös es doch so dass du eben nach Username und Passwort diese ID ausfilterst und in deiner SESSION speicherst.
Dann lässt du jedes deiner Scripte am Anfang prüfen (zB mit einer Datei die du dann per require_once ausliest) ob deine SESSION ID nicht leer ist. Wenn leer verweis auf deine Login. Ansonseten eben werden alle Daten des User via der ID ausgelesen.

mit session_destroy übrigens kannst du den Logout bewerkstelligen
Zuletzt geändert von Labrar am 07.08.2008, 18:54, insgesamt 1-mal geändert.
Ich möchte wie mein Opa im Schlaf sterben und nicht heulend und schreiend wie sein Beifahrer.

Mentalisten sprechen Rabisch und sprengen den Geist
Fundamentalisten sprechen Arabisch und sprengen sich selbst

Von O. Kalkofe über die Urin Kellner Show
Labrar
Mitglied
 
Beiträge: 443
Registriert: 11.04.2007, 21:52
Wohnort: Ludwigsburg

Re: Userlogin - $_SESSION[id]

Beitragvon =Max= am 07.08.2008, 18:52

ja das is in einem usersystem eingebaut ;) hm moment kann vlt daran leigen das da auch ne session id benutzt wird und die sich kreutzen oder so xD
EDIT: Nein da heißt es $_SESSION['user_id']

und ja das sessioN_start() exisitert ;) halt im cms index.php
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Re: Userlogin - $_SESSION[id]

Beitragvon Labrar am 07.08.2008, 18:55

session_start muss in jede Datei die auf SESSIONS zugreift.
Ich möchte wie mein Opa im Schlaf sterben und nicht heulend und schreiend wie sein Beifahrer.

Mentalisten sprechen Rabisch und sprengen den Geist
Fundamentalisten sprechen Arabisch und sprengen sich selbst

Von O. Kalkofe über die Urin Kellner Show
Labrar
Mitglied
 
Beiträge: 443
Registriert: 11.04.2007, 21:52
Wohnort: Ludwigsburg

Re: Userlogin - $_SESSION[id]

Beitragvon =Max= am 07.08.2008, 19:04

Ich habs jetzt mal überall hinzugefügt, Fehlermeldungen kommen keine. Mal schauen wie sich das ganze verhält obs auswirkungen auf die id hat
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Re: Userlogin - $_SESSION[id]

Beitragvon =Max= am 08.08.2008, 15:45

Nein das Problem ist nicht behoben. Es ist weiterhin so, das es einfach geändert wird.
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Re: Userlogin - $_SESSION[id]

Beitragvon mstrauss am 08.08.2008, 16:19

Überprüf mal auf jeder Seite, wo du Session-Variablen manipulierst, ob du nicht zufällig die Session ID überschreibst.

Wenn du auf jeder Seite mit session_start() beginnst, übernimmt ja php das Sessionhandling für dich und mir sind da keine BUGs bekannt.

Gruß
Markus
Menschen - kleine Säcke aus denkendem Wasser, zusammengehalten von fragilen Kalzium-Ansammlungen.
Terry Pratchett
Benutzeravatar
mstrauss
Mitglied
 
Beiträge: 186
Registriert: 22.10.2005, 14:40
Wohnort: Duisburg

Re: Userlogin - $_SESSION[id]

Beitragvon =Max= am 09.08.2008, 10:42

Die Session-ID wird nirgends geändert. Das einzige was ich mache ist mit $_SESSION["login"] abfragen ob man eingeloggt ist und MySqlAbfragen mit der Session ID (Where id = '$_SESSION[id]')
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Re: Userlogin - $_SESSION[id]

Beitragvon Labrar am 09.08.2008, 19:09

lass doch mal auf jeder seite deine SESSION per echo ausgeben. Dann siehst du ja wann sie wo überschrieben wird. So fischen wir hier in trüben Gewässern.

Lass einfach mal alle SESSIONS ausgeben mit
Code: Alles auswählen
print_r($_SESSION);
was du an letzter Stelle (also nach letztem ?> )einsetzt.
Ich möchte wie mein Opa im Schlaf sterben und nicht heulend und schreiend wie sein Beifahrer.

Mentalisten sprechen Rabisch und sprengen den Geist
Fundamentalisten sprechen Arabisch und sprengen sich selbst

Von O. Kalkofe über die Urin Kellner Show
Labrar
Mitglied
 
Beiträge: 443
Registriert: 11.04.2007, 21:52
Wohnort: Ludwigsburg


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast