[PHP] Sessions und Parameterübergabe in der URL

wurzelsepp

Ensign
Registriert
Jan. 2005
Beiträge
217
hallo zusammen!

hab mal eine kleine frage zu php:

also ich nutze bei meinem skript die $_SESSION-variable - nämlich um damit nach erfolgreichem login benutzerspezifische daten zu speichern.

bei nem login werden die eingegebenen daten mit denen in der datenbank verglichen. in dieser datenbank bzw tabelle gibt es auch eine spalte "USER_STATUS", wo gewissermaßen das berechtigungslevel des users vermerkt ist (admin, user, nicht registriert...).

wenn sich jemand neu registriert, dann bekommt er erstmal den status "unregistriert". alle admins bekommen bei so einer registrierung ne email geschickt, in der steht, wer sich registriert hat. zudem wollt ich das jetz so lösen, dass in dieser email an die admins noch ein link mitgeschickt wird (etwa in der art: www.domain.de/skript.php?username=name). diesen link tippt ein admin in seinen browser und (nach einem login, der auch überprüft ob der gute mann admin ist) schwupps ändert sich der status des users...

ich hab das soweit auch schon hinbekommen - allerdings hab ich da die $_SESSION-variable noch nicht genutzt. da ging das auch relativ problemlos. nur nachdem ich das noch mit dieser "authentifzierung" (dh überprüfung ob admin) mache, gerät das ganze n bisschen durcheinander. deswegen nur mal kurz meine frage: kann es sein, dass es damit (je nach parameter bei der kompilierung oder der config des interpreters bzw allgemein) probleme gibt? wüsstet ihr n anderen einfachen weg, das mit der email und dem mitgeschickten werten zu lösen?
 
Also ehrlich gesagt versteh ich nicht genau was das Problem ist. Du schilderst ja auch nicht einen konkreten Fehlerfall.

Deshalb geht meine Vermutung in die Richtung, dass Du da was mit den Variabeln generell durcheinander bringst.

Versuch doch ein wenig zu erklären wo genau der Fehler liegt.
 
sorry, wenn das nicht klar rüberkommt....

also ich post hier mal teile des codes:
um überhaupt irgendwas auf der seite machen zu können, musst man sich einloggen:
PHP:
if($_POST['_loginsent'])
{
  if(!$loginfehler = fehler_login())
  { 
    login();
    print_menu();
  }
  else
  { 
    zeige_login($loginfehler); 
  }
}
else
{
  zeige_login();
}
die funktion login() macht dabei folgendes:
PHP:
function login()
{
  $_SESSION['logged_in'] = true;
  $_SESSION['user'] = $_POST['login_user'];
  print $GLOBALS['login_msg'] . $_SESSION['user'];
}
ok. so weit so gut. das funktioniert auch einwandfrei: es wird bei einem erfolgreichem login mit dem username "xyz" auch ein entsprechendes "hallo xyz" ausgegeben... die funktion print_menu() wiederum macht das hier
PHP:
function print_menu() 
{
   print "<h1>" . $GLOBALS['menu_title'] . "</h1>\n";
   print "<table>\n";
   print " <tr>\n";
   print "  <td>";
   print_link('profile.php', $GLOBALS['menu_profile']);
   print "</td>\n";
   print "  <td>";
   print_link('members.php', $GLOBALS['menu_members']);
   print "</td>\n";
   print "  <td>";
   print_link('possibilities.php', $GLOBALS['menu_possibilities']);
   print "</td>\n";
   print "  <td>";
   print_link('logout.php', $GLOBALS['menu_logout']);
   print "</td>\n";
   print " </tr>\n";
   print "</table>\n";
}
und wenn ich jetz als eingeloggter user zb auf eine dort mit einem link angeführte seite gehe (also zb profile.php), dann bekomm ich auch das erwünschte ergebnis: nämlich wiederum ein "hallo xyz" - code dazu:
PHP:
session_start();

print_start($GLOBALS['profile_title']);
print "<center>\n";
//check if the user is logged in... 
if(isset($_SESSION['logged_in']))
{
  print 'hallo! du bist eingeloggt als';
  print "<br/>\n" . $_SESSION['user'];
  //die ganzen sachen von der datenbank holen... usw
so. jetz aber zum eigentlichen problem: wenn ich die seite "make_admin.php" aufrufe, die sich im gleichen verzeichnis befindet (!), dabei aber noch weitere parameter in der url übergebe (konkret also: www.blah.com/make_admin.php?user=unregistrierter_user) dann funktioniert der genau gleich aufgebaute code nicht! es wird stattdessen ein "hallo unregistrierter_user" ausgegeben. es scheint also fast so, als würde das $_SESSION['user'] irgendwie mit den in der url übergebenen werten nicht klar kommen... das aber kann ich mir jetz nicht wirklich vorstellen.
PHP:
//start session!
session_start();

$user = $_GET['user']; //den übergebenen wert abfangen... 

print_start($GLOBALS['profile_title']);
print "<center>\n";
//check if the user is logged in... 
if(isset($_SESSION['logged_in']))
{
  print $user;
  print "<br/>\n" . $_SESSION['user'];
dieser code gibt mir dann (obwohl ich eingeloggt bin und obwohl es bei "profile.php" problemlos funktioniert statt "unregistrierter_user xyz" einfach zweimal unregistrierter_user aus...

es wird aber auf jeder seite zu allererst eine session gestartet (dh bei jeder seite steht ganz am anfang "session_start()"!). das war nämlich meine erste vermutung - dass ich das irgendwo unterschlagen hätte. das war nicht der fall.

so. irgendwie glaub ich, dass es jetz immer noch nicht ganz klar ist ,)
deswegen vielleicht nochmal kurz zusammenfassend mein anliegen: kann es probleme bei der verwendung der $_SESSION-variable und in der url-angefügten werten geben?!
 
also erstmal würde ich von $GLOBALS weg gehen, sprich die Variable richtig an - per POST oder GET oder per SESSION HALT

den wenn Du eine Varible per GET übergibst, die USER heisst, wird dadurch die Variable in der SESSION die genauso heisst überschrieben mit dem durch GET übergebenen Wert!

OK?!
 
Hab mir die Mühe gemacht und den Code überfolgen.

Gibt doch mal die Werte aus. So wie Du schreibst verlässt Du Dich quasi blindlings dass die Zeile
if(isset($_SESSION['logged_in']))
einwandfrei funktioiniert.

Aber tut sie das? Wenn ich den Code richtig verstehe gehts ja auch nicht um den user in der Session, sondern das Flag logged_in. Das steuert dann ja ob unregistrierter_user xyz angezeigt wird!?

Gib doch ganz einfach auf der Seite ganz am Anfang, ohne dass Du sonst irgendwas machst, die Werte aus (auf der make_admin.php seite z.B.) also

print $_GET['user'] . "<br>";
print $_SESSION['user'] . "<br>";

Oder so in der Art. Vielleicht kommst Du so weiter?


PS: OK Antwort wurde gegeben. Finde ich aber schwach ehrlich gesagt wenn das wirklich stimmt.
 
danke für eure antworten!

irgendsowas hatte ich schon vermutet... aber das gefällt mir ganz und gar nicht. ich werd das jetz auf eine andere weise lösen, in der ich auf dieses übergeben von werten in der url verzichtete...
 

Ähnliche Themen

Zurück
Oben