Autor Zpráva
Andrej.B
Profil
Zdravim,

ako sa robi prihlasovanie cez cookies? Aka je filozofia takehoto prihlasenia?

Krok 1: Pozriem do premenej $_COOKIE['auth_id'] a porovnam ju s tym co mam v DB s predchadzajuceho prihlasenia? A ak sa rovna pustim uzivatela dalej?

Krok 2: A ak je prazdna $_COOKIE['auth_id'] tak si ju vytvorim:

<?php 

$auth_name = "auth_id";
$auth_value = uniqid('', true);
$auth_expires = time() + (86400 * 30); // 86400s - 24h - 1 den

setcookie($auth_name, $auth_value, $auth_expires, "/"); // 86400 = 1 den
?>

a zobrazim napriklad formular na zadanie mena a hesla, kde po zadani a porovnani s DB pustim dalej a potom zase len kontrolujem krok 1?

Nezda sa mi to moc bezpecne, ze mozem jednoducho prepisat kolacik a prihlasit sa pod druhym uzivatelom, ale zase chcem aby sa po zatvoreni prehliadaca nemusel zase prihlasovat ako ked to mam teraz cez SESSIONS... Treba este nieco porovnavat pre vacsiu bezpecnost?

Diky, staci len heslovito, bez kodu, len tu filozofiu, ci dobre chapem...
Keeehi
Profil
Andrej.B:
Řeší se to normálně přes session. Cookie ve které je session id se dá nastavit tak, aby nevypršela se zavřením prohlížeče.

Nezda sa mi to moc bezpecne, ze mozem jednoducho prepisat kolacik a prihlasit sa pod druhym uzivatelom
To co se snažíš vytvořit je úplně to samé jako session, jen si chceš cookies vytvářet ručně. Pokud bys to vytvořil stejně jako session, bezpečnost bude stejná. Nic bezpečnějšího nevytvoříš, vždy se musí předávat nějaký identifikátor. Co je ovšem úskalí vlastních řešení je to, že je velmi lehké v nich udělat chybu. Tím nemyslím že by kód nefungoval ale programátor si třeba neuvědomí časovou závislost, předpokládá větší entropii než ve skutečnosti je a podobně. Tyto chyby pak bývají fatální. Proto je v otázce bezpečnosti vždy lepší nevytvářet své vlastní implementace ale použít to co již je, na čem většinou odborníci strávili spousty hodin času aby zajistili, že systém je opravdu bezpečný.
Andrej.B
Profil
Takze vlastne staci dorobiť kontrolu k uz existujucemu prihlaseniu cez session ci existuje cookie a podla toho ho hned prihlasit alebo dat form na prihlasenie...
Keeehi
Profil
Andrej.B:
Ne na cookie, ale na obsah pole $_SESSION. To jak je session implementované tě vlastně vůbec nemusí zajímat. Tedy kromě případu kdy chceš aby přihlášení fungovalo i po znovuotevření prohlížeče. To je ale teď jiný problém, dá se řešit později tak se jím teď nebudeme zabývat.

Kontrola zda je někdo přihlášen či ne
if (isset($_SESSION["id"])) {
    // přihlášen
} else {
    // nepřihlášen
}

Jak přihlásit uživatele (po úspěšném ověření hesla)
$_SESSION["id"] = $id; // v proměnné $id je ID uživatele v databázi u kterého jsme úspěšně ověřili heslo

Jak odhlásit uživatele
$_SESSION["id"] = null;

Možná to víš, možná ne, tak to sem raději napíšu. Hesla jsou potřeba ukládat zahešovaná. To kvůli tomu že až ti někdo ukradne databázi, tak to sice bude průšvih, ale ne tak velký jako kdyby zahešovaná nebyla. K vytvoření bezpečného heše pro hesla slouží funkce password_hash. Naopak pro ověření, zda se při přihlášení shoduje heslo s uloženým hešem se používá funkce password_verify.
Andrej.B
Profil
ja mam prihlasovanie cez sessions a pouzivam password_verify, len som chcel dat moznost uzivatelovi byt prihlaseny aj po zatvoreni prehliadaca /pri prihlaseni zaskrtnut checkbox/ a opatovnom otvoreni prehliadaca... asi sa nechapeme :)

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