$_SESSION -> PHP-Bug?
Jens Hopp
- php
Hallo.
Wenn man stunden- oder besser Tagelang nach einem Fehler sucht und ihn nicht findet, beginnt man ja zu glauben, der Scriptinterpreter für den man arbeitet habe einen Bug. (Wenn man mit Javascript und dem Internet-Explorer zu tun hat, wird man ja sogar für diesen Glauben mit Bestätigung belohnt... aber das nur nebenbei).
Aber PHP? Ich betreibe PHP 4.2.3 unter Windows XP. In meinen Scripten schreibe ich munter verschachtelte Arrays in die Variable $_SESSION. So kann ich alles fein auf der nächsten Seiten wiederfinden. Das klappt seit Ewigkeiten wunderbar. Aber seit gestern ist der Wurm drin. Manche Werte werden auf der neuen Seite nicht mehr gefunden. Und ich habe keinerlei Ansatz, warum das so sein könnte. Man fragt sich: hat man alles untersucht, jeden Irrtum ausgeschlossen? Wendet man sich in seiner Not an die Selfcommunity und outet sich? Ja.
Ist jemandem schon mal irgendein Bug in PHP im Zusammenhang mit Sessions untergekommen?
Danke und viele Grüße
Jens
Hallo!
Ist der Bug reproduzierbar? Dann poste mal ein möglichst einfaches Beispiel. Wenn Du schreibst
$test = $_SESSION;
print_r($test);
ist es dann dasselbe?
Offene Bugs bzgl. Session: http://bugs.php.net/search.php?cmd=display&status=Open&phpver=&bug_type=Session+related&by=Any
geschlossene:
http://bugs.php.net/search.php?cmd=display&status=Closed&phpver=&bug_type=Session+related&by=Any
...
Oder benutz die Suche.
Grüße
Andreas
Hallo.
Er ist seltsamerweise nicht reproduzierbar. Sonst hätte ich ja hier bereits etwas gepostet. Aber ich kann mal grob sagen, was ich mache:
Ich schreibe in $_SESSION eine Fehlermeldung nach der Art
$_SESSION[errors] = 'blablabla_einfehler';
Danach mache ich -abhängig davon, ob ein Fehler da ist oder nicht- eine Weiterleitung zu anderen Dateien, deren Namen weiter oben im Script in Variablen geschrieben wurde:
if($_SESSION[errors]){
header ("Location: ".$file_a);
} else {
header ("Location: ".$file_b);
}
Nach der Weiterleitung will ich in der neuen Datei wieder auf $_SESSION[errors] zugreifen. Und das klappt mal und mal klappt es nicht, dann ist $_SESSION[errors] nicht definiert!
Im Moment der if-Abfrage ist -wenn vorhanden- $_SESSION[errors] auch auslesbar. In nachfolgenden Dateien mal ja und mal nicht (und Session ist dort auch gestartet, andere Session-Variable sind bekannt, also solche Fehler sind ausgeschlossen)
UND: Auf einem Linux-Server mit gleicher PHP-Version funktioniert das ganze korrekt!!!
Ein Bug?
Wohl ein Bug oder?
seltsam...
Viele Grüße Jens
Hi!
Wirklich seltsam, nur solange das nicht reproduzierbar ist wird es kaum als Bug anerkannt, daher sollest Du das Problem weiter eingrenzen, oder mal in der Bug-Datenbank von bugs.php.net suchen, ob der Bug evtl. schon bekannt ist, wenn es denn einer ist.
Grüße
Andreas
hallo,
if($_SESSION[errors]){
header ("Location: ".$file_a);
} else {
header ("Location: ".$file_b);
}
Fehlen absichtlich oder unabsichtlich die Anführungszeichen?
$_SESSION["errors"]
ohne gibt es nunmal Probleme.
ciao
romy
Hallo!
Fehlen absichtlich oder unabsichtlich die Anführungszeichen?
$_SESSION["errors"]ohne gibt es nunmal Probleme.
Wann denn? Meines Wissens nur wenn Konstanten mit gleichem Namen vorhanden sind.
Vielleicht hat es auch was mit der header-Weiterleitung zu tun, die so auch nicht wirklich gültig ist, zumindest wenn kein kompletter HTTP-Pfad angegeben ist.
Grüße
Andreas
Hi Andreas,
Fehlen absichtlich oder unabsichtlich die Anführungszeichen?
$_SESSION["errors"]
ohne gibt es nunmal Probleme.
Wann denn? Meines Wissens nur wenn Konstanten mit gleichem Namen vorhanden sind.
dazu kann ich irgendwie nichts finden. AFAIK braucht man die Anführungszeichen. Ausserdem weist Du ja mit diesem Satz auf eine mögliche Fehlerquelle hin. ;)
Vielleicht hat es auch was mit der header-Weiterleitung zu tun, die so auch nicht wirklich gültig ist, zumindest wenn kein kompletter HTTP-Pfad angegeben ist.
Da stimmt ja tatsächlich, habe es gerade auch gelesen ... grmbl und nun, ich benutze nur relative Pfade <kopfkratz> was kann denn da passieren?
(muss ich es wirklich alles umstellen? *heul* *schluchz*)
ciao
romy
Hi,
Fehlen absichtlich oder unabsichtlich die Anführungszeichen?
$_SESSION["errors"]ohne gibt es nunmal Probleme.
Wann denn? Meines Wissens nur wenn Konstanten mit gleichem Namen vorhanden sind.
nee, nee, auch wenn man Funktionsnamen oder sonstige Konstruktbezeichner trifft. Probier doch mal "new" ohne Häkchen in eines der Globalarrays zu schreiben. Da kannst Du PHP hinterher besser gleich neu starten.
Ich würde mal tippen, dass die Zuweisung auf $_SESSION vor dem Aufruf von session_start() stattfindet. oder dass session_start() ohne vorherige Prüfung auf Vorhandesein des "Session-Cookies" aufgerufen wird und in dem fehlerhaften Script dadurch versehentlich eine neue Sessiondatei aufgemacht wird.
Wie gesagt, nur Nadel und Heuhaufen. Ohne Input gibts eben nur unsortierten Output.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo!
Wann denn? Meines Wissens nur wenn Konstanten mit gleichem Namen vorhanden sind.
nee, nee, auch wenn man Funktionsnamen oder sonstige Konstruktbezeichner trifft. Probier doch mal "new" ohne Häkchen in eines der Globalarrays zu schreiben. Da kannst Du PHP hinterher besser gleich neu starten.
keine Ahnung, kann sein. Ich verwende das einfach mit "" und gut is ;-)
Ich würde mal tippen, dass die Zuweisung auf $_SESSION vor dem Aufruf von session_start() stattfindet.
Das glaube ich nicht. Wie er schreibt funktioniert das ganze auf einem Linux-Server und andere Session-Variablen funktionieren auch. Außerdem habe ich zumindest hier noch nie mitbekommen das jemand so einen dämlichen Fehler gemacht hat ;-)
oder dass session_start() ohne vorherige Prüfung auf Vorhandesein des "Session-Cookies" aufgerufen wird und in dem fehlerhaften Script dadurch versehentlich eine neue Sessiondatei aufgemacht wird.
Ich habe das _noch_nie_ geprüft! Und ich kenne außer Dir niemanden der das tut ;-) Aber die Diskussion hatten wir schonmal.
Ich wüßte auch nicht wieso man das machen sollte. Wenn man die Sessions ganz normal verwendet hat man damit nichts zu tun, dann entscheidet PHP ob Cockies oder "URL-Rewiting" verwendet wird. Wenn man denn aus welchem Grund auch immer nur Cockies verwenden möchte, funktioniert entweder alles oder nichts.
Wie gesagt, nur Nadel und Heuhaufen. Ohne Input gibts eben nur unsortierten Output.
Das Problem ist das er selbst den Fehler nicht auf ein Kernproblem reduzieren kann, da es einfach sporadisch auftritt. Ich kann nur raten das Problem irgendwie an einem einfachen Beispiel versuchen zu reproduzieren, wenn das gelingt bitte mal das Beispiel posten. Ich würde mir auch mal überall
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
ausgeben, da sieht man dann direkt was übertragen wird und was nicht.
Grüße
Andreas
Hi Andreas,
keine Ahnung, kann sein. Ich verwende das einfach mit "" und gut is ;-)
na, sag ich doch...
Ich würde mal tippen, dass die Zuweisung auf $_SESSION vor dem Aufruf von session_start() stattfindet.
Das glaube ich nicht. Wie er schreibt funktioniert das ganze auf einem Linux-Server und andere Session-Variablen funktionieren auch. Außerdem habe ich zumindest hier noch nie mitbekommen das jemand so einen dämlichen Fehler gemacht hat ;-)
Nö, hast du eigentlich Recht. MIR ist das noch NIE passiert *ggg*
Na, aber die anderen Variablen kommen eben aus der Session, deshalb sind die da. Nur die neu hinzugefügten sind verschwunden.
Ich wüßte auch nicht wieso man das machen sollte. Wenn man die Sessions ganz normal verwendet hat man damit nichts zu tun, dann entscheidet PHP ob Cockies oder "URL-Rewiting" verwendet wird. Wenn man denn aus welchem Grund auch immer nur Cockies verwenden möchte, funktioniert entweder alles oder nichts.
Es gibt User, die löschen mitten während der Session ihre Cookies. Mit den temporären geht das zwar zum Glück nicht bei den meisten Browsern, aber es gibt da ja Apotheken und Pferde und so...
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
für diesen Tipp mit dem <pre> könnte ich dich glatt kutschen (keine Panik). Hab mich immer schon geärgert, dass die Ausgabe nicht so aussieht, wie in der Doku. Hätte ja auch mal sekbst drauf kommen können. Man lernt immer was dazu!
Liebe Grüße aus http://www.braunschweig.de
Tom