Pseudokod:
// ktoś wchodzi na strone. stworzenie_sesji() { - generowanie keya sesji - zapis do bazy (userid=0, useragent, ip) // niezalogowany userid 0 - zapis id rekordu z tabeli sesji do 'sid' w SESSION - zapis keya w SESSION } jako niezalogowany { stworzenie_sesji(); nakaz_zalogowania(); } logowanie() { - zmodyfikowanie keya sesji - zapis keya w SESSION } jako zalogowany { pobranie danych z tabeli sesji - rekord o 'sid' porównanie: - klucza zapisanego w sesji - adresu ip - useragent z rekordem w tabeli sesji jeżeli któreś z powyższych się nie zgadza { niszczenie sesji usuwanie wpisu sesji z tabeli nakaz_zalogowania(); } }
W sesji php trzymam tylko:
'sid' czyli id rekordu z tabeli sesji
skey czyli unikalny identyfikator sesji taki sam zapisywany jest w rekordzie sesji
Sessionid trzymane i przekazywane tylko w ciastku.
Zmiana sessionid przez session_regenerate_id.
Rozmyślałem też nad trzymaniem ip,useragent i userid w sesji żeby rzadziej korzystać z tabeli sesji.
Coś poprawić? Jakieś sugestie?