Diskuze: Náhodná změna hodnoty v Session
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Pokud pouzivas IE, tak pro framy, jsem cetl, ze musi byt v header toto
header('P3P: CP="CAO PSA OUR"'); // aby session fungovala spravne v iframe v IE
Jinak, existuje funkce regenerate session id. Tu sem videl pouzivat snad jen ve 2 programech za vsechna ta leta. Takze nemam tuseni, za jakych okolnosti bylo nutne ji pouzit.
Jestli pouzivas https, tak si zkontroluj, ze vsechny stranky volas pres https. Prohlizece nemaji treba rady kombinovani http a https.
Jestli je empty $_SESSION["kosik_id"], pak je celkem pravdepodobne, ze mas
prazdnou i $_SESSION. Kazdopadne funkce empty neni isset. Empty slouzi ke
zjisteni nulove hodnoty, isset pro samotnou existenci. Tady to asi nevadi, ale u
formulare by sis mohl nadelat spoustu problemu, pokud nevis, proc a kde jakou
funkci pouzivas
Muzes si zkusit vypsat var_dump. A muzes pridat error_reporting na prvni php
radek. Treba tam mas furu chyb.
Jo, a zkus vysledovat typ a verzi prohlizece. Snadneji se to pak googluje, pokud
je to chyba specialne pro nejaky prohlizec.
Dělá to na různých počítačích (Windows, mac) i prohlížečích. Je to jednou za čas. $_SESSION naplněná bude, protože hodnoty jako jsou jméno, příjmení atd. zůstanou i po změně kosik_id. Což je divné. Nicméně děje se to jednou za čas a nejsem schopen to tedy vychytat. Var_dump vypíše hodnotu, to je v pohodě a error_reporting je zapnutý a nic. Změnil jsem tedy na isset a uvidíme.
Pokud ostatni zustane, znamena to, ze mas nekde v kodu chybu. Kod, ktery
dokaze tu jedinou hodnotu zrusit. Unset, free_mem, session[hosnota] = '' a
podobne. Takze by melo stacit projit uplne vse, kde se vyskytuje slovo session
nebo hodnota (kosik_id) a najit to.
Error_reporting je dobry na hledani takovych chyb, jako mezera, utf-bom znak
pred tagem php, kdy pak pise session is started a odmita menit dal hodnotu
session. Ale, to se da resit ob_start na zacatku.
Kdyz si pres zminovanou cast kodu das var_dump, tak je to vse ok?
Protoze empty neni isset, empty je true, kdyz value==0 =='0' ==0.5 (https://www.php.net/…on.empty.php), a mozna i ==''. Jsi si
jisty, ze nemas kosik=0, treba.
Změnil jsem trochu kód, tak uvidíme. Nicméně nikde v kódu to nenastavuji. var_dump nic.
No, nevim, nevim.
Podle toho, jak jsi to popsal, tak tam mas nejspis kod, ktery ti tu hodnotu
kosiku zrusi. Ten je treba najit a upravit.
jinak, ten var_dump bych tam napsal takto:
if (empty($_SESSION["kosik_id"])){
var_dump('chyba session', $_SESSION);
echo 'Pokud vidite tuto zpravu, zkuste mi popsat, co jste delali tesne pred tim na mail.. Na co jste klikli na z jake stranky. Pripadne uplne od zacatku vasi navstevy, pokud si to pamatujete';
}
Pokud nemas nic v kodu, co tu dava do session treba nejakou promennou, ktera je aktualne null, tak by mohl byt nejaky problem na serveru pri ukladani session.
Tak jsme přišli na problém. Celý problém se Session a Cookie byl v nastavení Samesite=strict.
Bohužel jsem o tom neměl tušení, že tam kolega tohle vůbec dal v rámci bezpečnosti CSP a přišel jsem na to až po dlouhé době. Nastavili jsme tedy na Lax a je to v pohodě.
Vzhledem k tomu, že v Session udržujeme jen ID košíku, tak předpokládám, že to bezpečnostní riziko nepředstavuje. S Lax funguje web tak, jak má. Takže kdyby to někdo řešil, tak...
Zobrazeno 7 zpráv z 7.