[PHP] Bug in session.use_trans_sid

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Gister ontdekte ik dat de session.use_trans_sid niet helemaal werkt zoals het moet werken. Op mijn site gebruik ik sessies en dat wou ik graag zo houden. Alleen wanneer ik de session.use_trans_sid gebruik omdat men cookies uit heeft staan, wordt de phpsessidniet altijd even goed in de url geplaatst. Bijvoorbeeld:
code:
1
index.php?page=test&type=file&file=een_bestand_in_dit_geval_een_mp3&&PHPSESSID=Vq48IfkalRYAONJHxaOnwAVXd9jfBqGE#40;160cbr).mp3


In het geval van de bovenstaande url wordt de phpsessid geplaatst op de plek waar een ( moet staan, maar PHP plaatst de phpsessid direct achter de & van de &#40. Het maakt opzich niet uit welk teken er staat, wanneer het een in html opgegeven character is, wordt de & daarvan gepakt als voorganger van de &ampphpsessid. In het bovenstaande voorbeeld wordt de phpsessid voorafgegaan aan een &amp, maar of dit nu de &amp of & is, maakt geen verschil. Hiervoor gebruik ik, voor de nieuwsgierigen, ini_set('arg_separator.output', '&amp').

Deze website meldt al over deze bug, maar ondanks dat vraag ik mij af of er ook een oplossing voor is terwijl de session.use_trans_id aanstaat? Deze oplossing kan misschien ook gelden voor output_add_rewrite_var(), want die heeft er ook last van.

Overigens heb ik het zelf al opgelost door het volgende te doen:
PHP:
1
2
3
4
ini_set("session.use_trans_sid", 1);

//dit plaats ik achter elke url die naar de website zelf verwijst
(!isset($_COOKIE[session_name()]) && $sessionManager->returnUseSession() ? "&" . session_name() . "=" . session_id() : "")



Disclaimer:
In de bovenstaande post heb ik expres de ; achter de in html opgegeven characters weggelaten, anders worden ze niet goed weergeven.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

En als je tekens als ( en ) nu eens urlencode ipv html-encode? (%28 en %29 respectievelijk)

[ Voor 25% gewijzigd door crisp op 18-02-2008 00:32 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Dat lost het probleem inderdaad op. Nou was ik daar al eerder mee bezig geweest, maar het had me geen succes gebracht. Nu weet ik ook waarom: ik had eerst een eigen functie tekens omzette naar HTML karakters, hierin werden de ( en de ) ook meegenomen. Tegenwoordig maak ik gebruik van HTML entities die dat niet doet, maar bij het testen deed ik wel html_entities_decode die de url zou omzetten naar gewone tekens waarna ik urlencode er op los liet. Tja, dan blijf je bezig 8)7. Het ging om uit database getrokken text met bbcode.

Omdat ik wel gesteld ben op controle van de inhoud, blijf ik bij mijn eerste oplossing waarbij ik zelf bepaal achter welke link PHPSESSID komt te staan.

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

PHP bugs kun je melden op http://bugs.php.net. Als er al een oplossing of alternatief is, dan krijg je die ook te horen.

If it isn't broken, fix it until it is..