Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
BF extended 2022
Avatar
Tomáš Dvořák:10.5.2021 13:13

Ahoj, občas se stane, že se zničehonic obnoví hodnota v $_SESSION["ko­sik_id"]. V připojovacím scriptu db.php mám toto:

if (empty($_SESSION["kosik_id"])){
    $_SESSION["kosik_id"] = uniqid();
}
else{
    $_SESSION["kosik_id"] = $_SESSION["kosik_id"];
}

Nevím z jakého důvodu se stane, že je empty. Nicméně ostatní hodnoty například $_SESSION["jmeno"] zůstane stejná. Tedy k restartu php/apache serveru nedochází.

Mohl by mě někdo nakopnout kde respektive co hledat? Vyprázdnění/zničení session je až po dokončení objednávky.

 
Odpovědět
10.5.2021 13:13
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.5.2021 15:57

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["ko­sik_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.

Editováno 10.5.2021 15:58
 
Nahoru Odpovědět
10.5.2021 15:57
Avatar
Odpovídá na Peter Mlich
Tomáš Dvořák:11.5.2021 8:14

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.

 
Nahoru Odpovědět
11.5.2021 8:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.5.2021 8:50

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.

 
Nahoru Odpovědět
12.5.2021 8:50
Avatar
Tomáš Dvořák:12.5.2021 9:06

Změnil jsem trochu kód, tak uvidíme. Nicméně nikde v kódu to nenastavuji. var_dump nic.

 
Nahoru Odpovědět
12.5.2021 9:06
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.5.2021 12:58

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.

Editováno 12.5.2021 13:00
 
Nahoru Odpovědět
12.5.2021 12:58
Avatar
Tomáš Dvořák:12. dubna 8:10

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...

 
Nahoru Odpovědět
12. dubna 8:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.