Autor Zpráva
Medvídek
Profil
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
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
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é.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0