Diskuze: Uchovávání přihlášeného uživatele
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 17 zpráv z 17.
//= 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.
ahoj, moc jsem nepobral to "uchovávat kdo je přihlášen". Jestli myslíš, aby si aplikace pamatovala, že je tam někdo přihlášen, tak si do session ulož jeho ID a pak z databáze vybírej data, která potřebuješ (jméno atd.).
Podívej se, jak se pracuje se session. Poté stačí uložit uživateli onu
session, že je přihlášen, vzhledem k tomu, že je na straně klienta pouze
nějaké ID, nemůže to nijak obejít. (Samozřejmě, že se tyto ID dají
ukrást, ale ukrást se dá vše). Problémy session bývají takové, že na
serverech obvykle za 15 minut vyprší, zruší se.
Proto je lepší používat cookies. V tomto případě si musíš vymyslet
nějaký způsob, jak se bude uživatel pomocí cookie autentizovat a jak celý
systém bude fungovat. Obecně uživateli opět pomocí cookie zapíšeš na
počítač nějaké číslo (náhodné, velké) a to číslo si uložíš do
databáze s informacemi o uživateli. Poté je jen vždy získáš a podle toho
se dozvíš, o jakého uživatele se jedná.
Pokud tomu dobře rozumím, chceš získat seznam uživatelů, kteří jsou online.
Tedy, pokud je přihlášení úspěšné, uložil bych do databáze záznam s tím, že je daný uživatel(ID) přihlášen - nejlépe do zcela jiné tabulky.
Při odhlášení nebo při delší neaktivitě bych tento záznam opět smazal.
Nikdy jsem nic podobného nedělal, tak nevím, zda existuje ještě jiný, lepší způsob.
Pokud bys chtěl získat seznam online lidí, budeš si psát do databáze
jejich přístupy a dejme tomu, že všichni co přistoupili na web před méně
než 3 minutami jsou online.
Kdo by se například doma při odchodu odhlašoval? Z toho počet online
uživatelů nezískáš...
Neaktivní uživatel: Po zapnutí zasedání, se session ID automaticky generuje do cookies a platnost je do uzavření prohlížeče. (někdy se může smazat i po hodině neaktivity, záleží na konfiguraci)
Zdeněk Pavlátka: Také nezapomeň vygenerovat nové zasedání (Ochrana proti session fixation)
Přihlášení může vypadat třeba takto:
//Po úspěšném zadání loginu a hesla stačí toto
session_regenerate_id(); //Ochrana před session fixation
$_SESSION['user_id'] = $id;
A odhlášení provedš:
unset($_SESSION['user_id']);
Uchování kdo je přihlášen: Stačí třeba updatovat čas u uživatele ve sloupci 'aktivita', apod..
Já vím, ale předpokládejme, že by chtěl být přihlášen po dobu jednoho měsíce. Na to se již session použít moc nedá. Navíc na některých free hostincích je doba platnosti session značně omezena...
Životnost zasedání se dá také nastavit, ale jak pravíš všude to není možné.. :/
Ještě bych měl dotaz, kdy se používá session_destroy();
Kdyz chces zlikvidovat veskere uzivatelovy sessions z tve stranky.
Kdo by se například doma při odchodu odhlašoval? Z toho počet online uživatelů nezískáš...
Chces povedat, ze je zbytocne pri prihlasovani cez session, zaroven urobit update uzivatela na online a pri odhlaseni zaroven urobit update na offline, pretoze uzivatel..sa neodhlasi ale zatvori okno...a neexistuje ani riesenie, zeby po zatvoreni okna urobilo presmerovanie na url odhlasenia...? Ake je na to vlastne optimalne riesenie, ktore by dokazalo presne urcit kto je online?
Socket IO se na toto dá použít, můžeš pomocí toho říct, kolik
klientů je aktuálně přihlášených. Jen na straně serveru musíš
ověřovat, jestli jeden uživatel nemá otevřených více oken. Např. tady
Dělají to tam sice v NodeJS, ale neměl by být problém tu logiku převést
do php
Zobrazeno 17 zpráv z 17.