Autor | Zpráva | ||
---|---|---|---|
Medvídek Profil |
#1 · Zasláno: 11. 1. 2013, 09:56:47
Mam takovej dotaz, dejme tomu, že mam v COOKIE uloženou takovouto hodnotu:
96blA7NszjEcmjFnaS5/ktPbkNJFRFXhCOoZyMC9w1wkevsDlxvaHS+S04QL/quvZetyMuk7n4f0qyiPIgpM3jgJFAFmmJi4Qpv3A3YkkWt2NRIWX+Gk6DFCG0daVFTA Ale pokud si tuto hodnotu dumpnu, vznikne mi toto: string(128) "96blA7NszjEcmjFnaS5/ktPbkNJFRFXhCOoZyMC9w1wkevsDlxvaHS S04QL/quvZetyMuk7n4f0qyiPIgpM3jgJFAFmmJi4Qpv3A3YkkWt2NRIWX Gk6DFCG0daVFTA" Prostě místo + mi udělá mezeru, a nevím, jak z toho dostat opět ten plus. Bohužel je to COOKIES, která je vytvářená několika aplikacemi, takže je nemůžu donutit balit hodnotu do base64. Je nějaká možnost, jak si to v PHP přečíst správně? |
||
Joker Profil |
#2 · Zasláno: 11. 1. 2013, 10:19:20
Nedekóduje se to někde náhodou z URL, nebo neposílá v URL, nebo tak něco?
Já jen že „+“ je právě v URL symbol pro mezeru, tak tímhle směrem bych asi pátral. Medvídek: „PHP čte špatně COOKIES“ Mě vždycky baví, kolik lidí v situaci, kdy buď udělali chybu oni, nebo je chyba v nějaké úplně základní funkčnosti daného programovacího jazyka, automaticky předpokládá tu druhou variantu. (Nejspíš jsou lidi, kteří nikdy v životě neudělali chybu v kódu, zato se neustále potýkají s nefunkčnostmi a chybami prakticky ve všech existujících programovacích jazycích :-) ) |
||
1Pupik1989 Profil |
#3 · Zasláno: 11. 1. 2013, 10:20:57
Teoreticky by to mělo jít pomocí url_encode. Druhá možnost je preg_replace.
|
||
Medvídek Profil |
Joker:
„Mě vždycky baví, kolik lidí v situaci, kdy buď udělali chybu oni, nebo je chyba v nějaké úplně základní funkčnosti daného programovacího jazyka, automaticky předpokládá tu druhou variantu.“ Spíš mě zajímá, proč když se uloží v ASP COOKIES, tak se uloží čistě textově, ale PHP ho ukládá jako url_encode. Když mi v hlavičce přijde toto: Array ( [0] => PHPSESSID=npds2cpu48ft75usp817ut2s41 [1] => __utma=97962631.1755755869.1357896512.1357896512.1357901139.2 [2] => __utmc=97962631 [3] => __utmz=97962631.1357896512.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) [4] => __utmb=97962631.10.10.1357901139 [5] => auth=UIBZvmqtMRHxmZ3QR9jQr3AfbwdLjlOu3mw3DkPw8zHPfS3Rih7gXq1eGFVoSoOg5Tgh3Tw4xDS72s9G99YQ+ez1uZTRNhU9lSlMcg0uCV0XWq0C+bqTi6M/RpVfzuh/ ) Tak nechápu, proč v echo $_COOKIE["auth"]; dostanu místo plusů mezery. Tohle dostanu, pokud uložim hodnotu do COOKIES v PHP Array ( [0] => PHPSESSID=npds2cpu48ft75usp817ut2s41 [1] => __utma=97962631.1755755869.1357896512.1357896512.1357901139.2 [2] => __utmc=97962631 [3] => __utmz=97962631.1357896512.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) [4] => __utmb=97962631.12.10.1357901139 [5] => auth=e%2F6reJAiASKaSD5Eppm7RFjwFx0R84Zz2Ru2%2FxlC%2BoM2QIYYN01O2GyT3aYTUlfbuZGxWW%2Fx7%2FWkzLMXP9f7TAq%2FSKa%2BC0WcIrfujiFiJS976FUklH0BshArG%2B71R48J ) Takže abych to shrnul. Před uložením dat do COOKIE má obsah tento formát: gSZIl6To/1d5uL2FcEU5EBN3NC4y9BndZYee8Koap7Enmq9kYhl/qigLdAByWF+xYETQtDs1wDiuUo9uI4uMNMoclULT3nzcUegUH5nSmGTaGj5U1NxSClJ6+y74BgSC Provedu uložení do cookies: @setcookie("auth", $encrypted, $expire,"/","domena.cz"); a výsledek v hlavičce je: Array ( [0] => PHPSESSID=npds2cpu48ft75usp817ut2s41 [1] => __utma=97962631.1755755869.1357896512.1357896512.1357901139.2 [2] => __utmc=97962631 [3] => __utmz=97962631.1357896512.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) [4] => __utmb=97962631.20.10.1357901139 [5] => auth=gSZIl6To%2F1d5uL2FcEU5EBN3NC4y9BndZYee8Koap7Enmq9kYhl%2FqigLdAByWF%2BxYETQtDs1wDiuUo9uI4uMNMoclULT3nzcUegUH5nSmGTaGj5U1NxSClJ6%2By74BgSC ) Takže předpokládám, že při uložení COOKIE v PHP mi z toho udělá url_encode verzi. Já se ptám proč, nebo jak se toho zbvait a uložit čisté data :) Takže přiznávám, že možná není chyba v PHP, ale předpokládám, že když mu předám řetězec k uložení do COOKIES, tak mi ten řetězec tak uloží :) Sypu si popel na hlavu, tuto funcki sem neznal: http://php.net/manual/en/function.setrawcookie.php :) Samozřejmě pro přístup ke COOKIES sem si musel napsat funkci. //KONTROLA, ZDY-LI EXISTUJE COOKIES AUTH function auth_exists(){ foreach(explode('; ',$_SERVER['HTTP_COOKIE']) as $rawcookie){ $raw_cookie = explode('=',$rawcookie, 2); if($raw_cookie[0] == "auth"){ $AUTH = $raw_cookie[1]; } } return ($AUTH) ? $AUTH : false; } což mi přijde poněkud nešťastné. |
||
Časová prodleva: 11 let
|
0