Autor Zpráva
JakubHekal
Profil
Zdravím
Do session na stránce uložím nějaká data, která tam mají zůstat 1 měsíc.
Zatím to řeším takto:
ini_set('session.gc_maxlifetime', 60*60*24*30);
ini_set('session.cookie_lifetime', 60*60*24*30);
Bohužel jakmile zavřu okno kde byla stránka otevřená a znovu ho za chvíli otevřu data v session jsou pryč.
Moc díky za případnou pomoc.
RastyAmateur
Profil
JakubHekal:
Ale session mají zůstat uložená pouze po dobu této návštěvy, ne? Když chceš ukládat proměnnou na jeden měsíc, použij cookies

Pokud opravdu potřebuješ prostě session uchovávat delší dobu, napadá mě problém v tom, že jinde můžeš mít nastaveno něco menšího (třeba těch standardních 1440)
If different scripts have different values of session.gc_maxlifetime but share the same place for storing the session data then the script with the minimum value will be cleaning the data. (zdroj)
Keeehi
Profil
RastyAmateur:
Pokud opravdu potřebuješ prostě session uchovávat delší dobu, napadá mě problém v tom, že jinde můžeš mít nastaveno něco menšího (třeba těch standardních 1440)
Úplně si nejsem jistý že to bude tento případ. Podle popisovaného chování není problém v tom, že by se cookies mazaly brzo, ale jen při zavření prohlížeče. Tedy alespoň tak to chápu já.

Já si myslím, že to bude spíš souviset s tímto. HTTP cookies | MDN » Session cookies
JakubHekal
Profil
Moc děkuji za návrhy.
Vzhledem k tomu že ukládám heslo tak jsem nechtěl používat cookies, ale session.
blaaablaaa
Profil
JakubHekal:
Heslo by nemělo být uložené nikde, ani v session. Nestačí si do cookies poznačit nějaký token?
Keeehi
Profil
blaaablaaa:
Token v cookie je vlastně session ID.

JakubHekal:
Ale jinak má blaaablaaa pravdu. Samotné heslo bys neměl mít uložené dokonce nikde. Ani v cookie, ani v session a dokonce v databázi. Měl bys mít v databázi uložený pouze hash hesla. K tomu slouží funkce password_hash a pro ověření password_verify.

Standardní návrh je, že při přihlášení oveříš heslo oproti hashi v databázi a pokud to projde, tak do sessio uložíš uživatelovo id. A to už jen na dalších stránkách používáš. Při odhlášení nemusíš dělat nic jiného že to id ze session smažeš.
JakubHekal
Profil
Keeehi a blaaablaaa
Děkuji za nápad.
Teď mám hesla zahashovana jenom v databázi a session uložené nezahasovane a na každé stránce jsem je porovnával.
JakubHekal
Profil
Problém vyřešen :-)
Davex
Profil
JakubHekal:
Problém vyřešen :-)
Také by bylo dobré napsat čím to bylo a jaké je řešení.
JakubHekal
Profil
Každý uživatel při registraci dostane vygenerované uid které se po přihlášení uloží do cookies a na každé stránce se kontroluje jeho platnost
blaaablaaa
Profil
JakubHekal:
Jestli je to obyčejné číslo, není to dobrá volba. Kdokoliv může (třeba i automaticky) zkusit nastavovat náhodná čísla a přihlašovat se za tvé uživatele.
Správné řešení je prodloužení doby platnosti session, jak psal Keeehi, nebo nějaké vlastní řešení session/tokenů (třeba vždy vygenerovat náhodný hash, uložit do db s jeho platností, možnost přidat třeba i ověření na user agenta apod., po kterém budeš chtít nové přihlášení).
JakubHekal
Profil
blaaablaaa:
Jak by se ten případný útočník dostal k úpravě cookies na mém webu?
Radek9
Profil
JakubHekal:
Cookies se ukládají u uživatele, ne u tebe na webu. Takže si je kdokoli může jakkoli změnit. Pokud by znal tvoje UID, tak ho stačí vyplnit do cookie a bude přihlášen jako ty.

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