Sessions und der Validator
Wilhelm Turtschan
- php
aloha heja he
Ich erstelle gerade Seiten fuer einen Hardware-Lieferanten. Die Preise bei den Angeboten sollen nur sichtbar sein, wenn ein bestimmter Freischaltcode eingegeben wurde.[1]
Soweit so gut, mit Session ja kein Problem.
Allerdings wird hinter dem einleitenden <form> ein Hiddenfeld mit der Session-Id eingefuegt, was laut Validator nach XHTML 1.0 strict hier nicht erlaubt sei:
<div id="navigation3">
[..blubb..]
<form method="post" action="php/anzeige.preis.php"><input type="hidden" name="PHPSESSID" value="90160c7cecfa2ab0b311ba6080c45776" />
<p>
Eingabe Preiscode<br />
<input type="text" size="4" name="preisanzeige" /><br /><input type="submit" value="freischalten" /><br />
<br />
<input type="hidden" name="preisarea" value="010" />
<input type="hidden" name="parmliste" value="0de02002001010" />
</p>
</form>
</div>
Ebenso werden die Links erweitert, das fehlerhafte & wird mit ini_set.. abgefangen.
Meine Fragen:
Versuche mit ini_set und den Parametern session..cookies waren vergeblich (vermutlich von mir falsch gesetzt), ebenso die Graberei im Archiv (wenn mal nicht gerade ausgelastet).
Der Link: http://www.pictum.de/kimbrer/page.phtml?pl=0de02002001020
Fuer den Validator auf das Bild links unten (Produkte) in der Fusszeile klicken.
man liest sich
Wilhelm
[1] Ueber die Sinnhaftigkeit braucht man mir nichts erzaehlen, der Kunde will es so, auch wenn ich eine gegenteilige Meinung vertrete.
Moin!
Allerdings wird hinter dem einleitenden <form> ein Hiddenfeld mit der Session-Id eingefuegt, was laut Validator nach XHTML 1.0 strict hier nicht erlaubt sei:
Ebenso werden die Links erweitert, das fehlerhafte & wird mit ini_set.. abgefangen.
Ist alles eine Frage deiner php.ini.
Das & kannst du dort auch als & definieren (ini_set muß da nicht sein), und ebenso kannst du definieren (und auch abstellen), dass PHP automatisch jedes Formular erweitert. Ist ja nur dann relevant, wenn du mit trans_sid arbeitest.
Ich denke, die Einstellungen in der php.ini erklären sich in diesem Punkt von selbst.
Und wenn du deinem PHP abgewöhnt hast, hinter Formulare sofort das Hidden-Feld zu klatschen, mußt du es natürlich manuell an einer genehmen Stelle einfügen, und es auch ggf. nur im Bedarfsfalle dort reinpflanzen.
Bedenke: <input type="hidden" name="<?php echo sessionname(); ?>" value="<?php echo sessionid(); ?>" />
Wenn die Konstante SID nicht leer ist, muß das da oben rein.
- Sven Rautenberg
aloha heja he
Ist alles eine Frage deiner php.ini.
Das & kannst du dort auch als & definieren (ini_set muß da nicht sein), und ebenso kannst du definieren (und auch abstellen), dass PHP automatisch jedes Formular erweitert. Ist ja nur dann relevant, wenn du mit trans_sid arbeitest.
Ich denke, die Einstellungen in der php.ini erklären sich in diesem Punkt von selbst.
Auf die php.ini habe ich in diesem speziellen Fall keinen Zugriff.
Und wenn du deinem PHP abgewöhnt hast, hinter Formulare sofort das Hidden-Feld zu klatschen, mußt du es natürlich manuell an einer genehmen Stelle einfügen, und es auch ggf. nur im Bedarfsfalle dort reinpflanzen.
Bedenke: <input type="hidden" name="<?php echo sessionname(); ?>" value="<?php echo sessionid(); ?>" />
Wenn die Konstante SID nicht leer ist, muß das da oben rein.
Werde mal ein bisschen rumprobieren. Danke.
man liest sich
Wilhelm
Moin!
Ich denke, die Einstellungen in der php.ini erklären sich in diesem Punkt von selbst.
Auf die php.ini habe ich in diesem speziellen Fall keinen Zugriff.
Sowas dachte ich mir schon fast. Aber du kannst in deine eigene ja mal reinschauen, das mit den Konfigurationsmöglichkeiten (siehe Thomas' Link) bei php.net abgleichen und dann eine passende .htaccess hochladen.
Es ist jedenfalls keineswegs kompliziert. Wenn du die Automatik abstellst, mußt du alle Links manuell mit Session-IDs versorgen, das ist eklig (oder du hast eine Template-Engine, die das mal eben mitmacht bzw. ermöglicht). Wenn du nur das automatische Einfügen bei Formularen abstellst, könnte das Problem einfacher werden, weil Formulare deutlich seltener vorkommen und zentraler mit Hidden-Feldern versehen werden können, als Links.
Bedenke: <input type="hidden" name="<?php echo sessionname(); ?>" value="<?php echo sessionid(); ?>" />
Wenn die Konstante SID nicht leer ist, muß das da oben rein.
Werde mal ein bisschen rumprobieren. Danke.
Rum probieren ist auch lecker. :)
- Sven Rautenberg
aloha heja he
Sowas dachte ich mir schon fast. Aber du kannst in deine eigene ja mal reinschauen, das mit den Konfigurationsmöglichkeiten (siehe Thomas' Link) bei php.net abgleichen und dann eine passende .htaccess hochladen.
Ich habe jetzt mal die .htaccess so angelegt wie von Thomas beschrieben. Scheint alles zu funktionieren, auch wenn ich nicht ganz weiss warum. :-)
Was mir vorher noch aufgefallen ist:
In der Quellansicht von Firefox war nichts von PHPSESSID zu sehen, dagege im Epiphany schon. Nach der .htaccess zeigt Epiphany auch nichts mehr an. Machen die Browser das unterschiedlich?
Rum probieren ist auch lecker. :)
Wortverdreher. :-)
man liest sich
Wilhelm
Hallo,
Ich habe jetzt mal die .htaccess so angelegt wie von Thomas beschrieben. Scheint alles zu funktionieren, auch wenn ich nicht ganz weiss warum. :-)
Wenn session.use_trans_sid "0" ist, unterlaesst PHP das
automatische Anhaengen der Session-ID an relative URLs
und das automatische Hinzufuegen von Hidden-Fields
mit der Session-ID bei Formularen.
Wenn Du weiter nichts unternimmst, funktionieren dann
Sessions bei Dir nur noch, wenn der Benutzer Cookies
akzeptiert.
Lies Dich "richtig" ins Thema Sessions ein, wenn Du
sie schon benutzt.
http://www.php.net/manual/de/ref.session.php
http://www.dclp-faq.de/ch/ch-version4_session.html
u.s.w.
Gruesse,
Thomas
aloha heja he
Wenn Du weiter nichts unternimmst, funktionieren dann
Sessions bei Dir nur noch, wenn der Benutzer Cookies
akzeptiert.
Dies hatte ich herausgelesen und werde es ggf. noch abfangen, obwohl bei der Zielgruppe die Aktivierung von Cookies gegeben sein duerfte.
Lies Dich "richtig" ins Thema Sessions ein, wenn Du
sie schon benutzt.
"Richtig" kommt immer auf den Blickwinkel an. ;-)
Fuer die bisher benotigten Session-Verwendungen reichte die Standardvorgehensweise voellig aus. Sicherheitsaspekte waren da auch nicht so gross geschrieben, wie bei heutigem Beispiel. (Kunde will nicht, dass ein bestimmter Konkurrent die Preise sieht und mit seinen Angeboten immer billiger ist. Er soll sich selber die Muehe machen. *g*) Ich stolperte nur wegen der Validierung Xhtml strict darueber.
http://www.php.net/manual/de/ref.session.php
http://www.dclp-faq.de/ch/ch-version4_session.html
Die Links sind mir zur Genuege bekannt. Ich pflege normalerweise die Wuehlarbeit, aber irgendwie war mir das heute zu verwirrend geschrieben. Also bemuehte ich mal das Forum um Hilfe.
man liest sich
Wilhelm
Hallo,
Dein "Problem" haengt offenbar mit dem Fallback zusammen.
Wie übergebe ich Session-IDs ohne Cookies an eine andere Seite?
Was ist Fallback?
http://www.dclp-faq.de/q/q-sessions-fallback.html
session.use_trans_sid
ist wie folgt aenderbar:
PHP_INI_SYSTEM
=> in der php.ini oder httpd.conf
PHP_INI_PERDIR
=> in der .htaccess, Deine Chance! ;-)
http://www.dclp-faq.de/q/q-konfiguration-laufzeit.html
<IfModule mod_php4.c>
php_value session.use_trans_sid 0
</IfModule>
Gruesse,
Thomas
aloha heja he
Dein "Problem" haengt offenbar mit dem Fallback zusammen.
und mit der Eitelkeit keinen Fehler zu kriegen. :-)
Wie übergebe ich Session-IDs ohne Cookies an eine andere Seite?
Was ist Fallback?
http://www.dclp-faq.de/q/q-sessions-fallback.html
Klang beim Lesen "furchtbar" kompliziert. Mir duenkt da noch was von Klasse einbinden und so.
Ich hab mal mit dem Provider gequatscht, PHP laeuft als Modul, also werde ich auf die .htaccess losgehen.
Danke.
man liest sich
Wilhelm
Hallo Wilhelm,
- Gibt es eine Moeglichkeit mit Parametern aus http://de3.php.net/manual/de/function.ini-set.php das Hiddenfeld zu eliminieren
ini_set ('session.use_trans_sid', 0); vor session_start(). - allerdings erst ab PHP5.
PHP4 kann man aber austricksen: ini_set ('url_rewriter.tags', ''); vor session_start().
Siehe auch: http://bugs.php.net/bug.php?id=24693
Viele Grüße,
Christian
aloha heja he
- Gibt es eine Moeglichkeit mit Parametern aus http://de3.php.net/manual/de/function.ini-set.php das Hiddenfeld zu eliminieren
ini_set ('session.use_trans_sid', 0); vor session_start(). - allerdings erst ab PHP5.
PHP4 kann man aber austricksen: ini_set ('url_rewriter.tags', ''); vor session_start().
Hmmh, Bugs nuetze ich eigentlich nicht so gerne aus, er koennt ja mal korrigiert werden.
BTW: Deine "webmaster"-Box hat was fuer Dich. :-)
man liest sich
Wilhelm
Hallo Wilhelm,
Hmmh, Bugs nuetze ich eigentlich nicht so gerne aus, er koennt ja mal korrigiert werden.
Das ist ja kein Bug, nur eine andere Einstellung. Und wenn Du ganz paranoid bist, machst Du:
@ini_set ('url_rewriter.tags', '');
@ini_set ('session.use_trans_sid', 0);
Letzteres geht ja ab PHP5 und vorher wird das Verhalten der Einstellung url_rewriter.tags mit Sicherheit nicht geändert.
BTW: Deine "webmaster"-Box hat was fuer Dich. :-)
Schon bekommen und geantwortet. :-)
Viele Grüße,
Christian
aloha heja he
Die Seite ist auf die richtige Domain umgezogen.
man liest sich
Wilhelm