Kurioser Fehler: Session schreibt sich um?

nero_85

Erfahrenes Mitglied
Hi Leute!

Ich steh jetzt schon seit Stunden vor einem schier unlösbaren und gewaltig komisch kuriosen Problem:

Also ich hab vor auf meiner Homepage Nickpages anzubieten! Das ist auch nicht schwer! Man kann auf 2 Arten ins "NP-Netzwerk":

1. unangemeldet über eine Art Subdomain

oder

2. über das Login der Hauptseite, (also angemeldet).

1. funktioniert bereits beinahe Einwandsfrei, aber bei 2. hauts mir ein Problem rein, welches garnicht sein dürfte und zwar wird die User-ID die per Session übergeben wird verändert. Um das ganze etwas näher zu erläutern:


Auf einer Nickpage ist ein Gästebuch wie ihr ja alle wisst, und neben eines Eintrags erscheint auch der Name des Autors. Soweit so gut, ich geh jetzt also auf meine Hauptseite und melde mich an. Danach klicke ich auf den Link der mich zur NP weiterleitet. Mit der URL gebe ich selbstverständlich auch die Session-ID mit. Zur vollständigkeit übergebe ich auch noch den Wert 'userid'. Wenn man nun auf einen Autor klickt auf seiner Nickpage, wird man zur Nickpage des Autors weitergeleitet und siehe da, der ID-Wert in der Session wurde geändert und zwar auf die ID des users der aktuellen NP. Dabei benutze ich nur in einem kleinen Bereich (siehe Quellcode unten) das $_SESSION-Array. Auch session_register(); benutze ich nicht. Und keines der beiden benutze ich in irgendeiner Funktion oder dergleichen.

PHP:
if(isset($_GET['userid']) && isset($_SESSION['ID_u'])){

//sind beide gleich wird sie als usereigene np angezeigt (mit bearb.-link)
if($_GET['userid'] == $_SESSION['ID_u']){
$ID_u=$_SESSION['ID_u'];
$edit_np_link="bearbeiten";
$edit_delete="<a href=''>bearbeiten</a> | <a href=''>l&ouml;schen</a>";
$case="case1";
}
//sind sie nicht gleich wir sie als userfremde np angezeigt
else{
$ID_u=$_GET['userid'];
$edit_np_link = NULL;
$edit_delete="&nbsp;";
$case="case2";
}
}
//ist NUR eine Userid über URL verfügbar wird die np als fremd-np angezeigt

elseif(isset($_GET['userid']) && !isset($_SESSION['ID_u'])){
$ID_u=$_GET['userid'];
$edit_np_link = NULL;
$edit_delete="&nbsp;";
$case="case3";
}
//ist NUR eine Session-Userid verfügbar wird die np als eigene np angezeigt
elseif(isset($_SESSION['ID_u']) && !isset($_GET['userid'])){
$ID_u=$_SESSION['ID_u'];
$edit_np_link="bearbeiten";
$edit_delete="<a href=''>bearbeiten</a> | <a href=''>l&ouml;schen</a>";
$case="case4";
 
}
//ist keine Userid verfügbar wird die Fehlermeldung 101 ausgegeben
elseif(!isset($_GET['username'])){
echo '<b>Fehler 101:</b> Es ist ein Fehler aufgetreten. Melden Sie das bitte dem Webmaster.';
}


Das ist die Codestelle, wo ich mit dem $_SESSION-Array arbeite.
Bitte Helft mir,

Hier sind noch 3 Bilder für besseres Verständnis:

Nach der Anmeldung: Situation case1 (siehe Variable $case im Code) ist der Fall. Wie es sein sollte hier stimmt auch die ID in der session (ausgelesen mit $_SESSION['ID_u']):

Bild1 - Nickpage anfang

Klicke ich dann unten auf testuser1 werde ich auf dessen NP weitergeleitet. Hier ist case2 der Fall (so wie es sein sollte) ABER die ID ist plötzlich die von testuser1. Es ist ganz die selbe Seite nur mit anderem Design:

Bild2 - Weiterleitung zum Autor

Wenn ich dann auf meinen Namen unten klicke werde ich wieder auf meine NP weitergeleitet. Die ID in der Session hat sich wieder geändert. auf 2. Nun ist aber komischerweise case2 der Fall obwohl userid und ID in der Session gleich sind:

Bild3 - Zurück auf eigene NP

ICH WEISS WIRKLICH NICHTMEHR WEITER! BITTE HELFT MIR!
 
hast du vielleicht register_globals auf on? Weil du schreibst in einer Zeile
PHP:
$ID_u=$_GET['userid'];

Da die Sessionvariable genau den gleichen Index hat, wo du deine Userid drin speicherst kann es passieren (glaub eben durch register_globals), dass du damit auch die Session überschreibst. Ich hatte mal solche Erfahrungen gemacht, dass ich zwar nur eine normale Variable hatte, diese aber auch gleich eines Indexes der Sessionvariable lautete. Ich glaub das war auch mit register_globals gewesen. Also ich denke da liegt der Fehler, bin mir aber nicht 100% sicher.

Tada:
If register_globals is enabled, then the global variables and the $_SESSION entries will automatically reference the same values which were registered in the prior session instance.
 
Zuletzt bearbeitet:
Danke ihr habt Recht! Das hab ich wohl übersehen! :rolleyes:

Wisst ihr ob ein Hoster sowas ändert oder ändern lässt, denn sonst muss ich den Käse umschreiben, und dazu hab ich echt kein Bock! :(

cya
 
Wie ich sowohl mit dem einen als auch mit dem anderen Variablen arbeite ist mir schon klar, aber ich wollte eure Erfahrungen wissen, ob die Hoster das ändern oder ändern lassen, wenn man sie fragt! Natürlich ist das dann nicht die Garantie ob mein Hoster das auch macht aber ich will einfach schon mal wissen wie meine Chancen stehen! Übrigens, bevor jemand postet: mit ini_set(); geht nix!
 
Ich biete weiterführende Informationen zu einem Thema nicht ohne Grund als Verweise an:
Die register_globals-Direktive hat gesagt.:
Bitte beachten Sie, dass register_globals nicht während der Laufzeit Ihrer Skripte gesetzt werden kann (ini_set()). Wenn Ihr Server es erlaubt, können Sie aber .htaccess wie oben beschrieben verwenden. Beispiel für einen .htaccess Eintrag: php_flag register_globals on.Die register_globals-Einstellung lässt sich übrigens in der „php.ini“-, einer so genannten „.htaccess“- oder der „httpd.conf“-Datei gesetzt werden.
 
Zurück