2010-11-06 13 views
6

Tworzę funkcję logowania na mojej stronie i myślę o ponownym wygenerowaniu identyfikatora sesji na każdej stronie, aby wszystko było bezpieczniejsze.PHP "Session_regenerate_id" i uwierzytelnianie użytkowników

Czytałem PHP: s informacje na temat regenerate_id ale posty na stronie PHP są zupełnie różne od informacji, które przekazują o session_regenerate_id.

Może ktoś wyjaśnić te dwa pytania:

  • Czy muszę skopiować stare dane sesji do nowo wygenerowany lub jest to wykonywane automatycznie? Przykłady kodu są bardzo doceniane ...

  • Jak sprawdzić, czy użytkownik jest już zalogowany? Co mam przechowywać w zmiennej sesji i jak? przykłady kodu są bardzo cenione ...

Dzięki

Odpowiedz

7

Wywołanie session_regenerate_id() na każdej stronie może być trochę przesada, w zależności od konfiguracji. Ta funkcja służy do zapobiegania przechwytywaniu sesji i powinna być używana, ilekroć użytkownik podniesie poziom przywilejów (takich jak logowanie). Zwykle przełączasz się na połączenie https po zalogowaniu się użytkownika, co oznacza, że ​​musisz wywołać tylko session_regenerate_id(), gdy nowy plik cookie zostanie przesłany przez bezpieczne połączenie i nie będzie można go podsłuchać. Jeśli jednak na serwerze nie ma certyfikatu SSL, regeneracja pliku cookie sesji na każdej stronie może być dobrym rozwiązaniem.

Po wywołaniu session_regenerate_id() nie trzeba kopiować danych sesji. To wszystko zostało załatwione przez PHP. Zasadniczo tworzony jest nowy token sesji i plik cookie, dane sesji są kopiowane w magazynie sesji w celu skojarzenia z nowym tokenem, a jeśli przekażemy wartość true jako pojedynczy argument funkcji, stary plik danych sesji na dysku zostanie usunięty.

To, co przechowuje się w sesji, aby wskazać, czy użytkownik jest zalogowany, należy do Ciebie. Często po prostu przechowywać prosty wartość logiczną, aby wskazać, czy jesteś zalogowany, wraz z innymi wartościami posiadających nazwy użytkownika, nazwy itd Następnie sprawdzenie, czy ktoś jest zalogowany jest tak proste, jak to:

<?php 
    if ($_SESSION['logged_in']){ 
     //User logged in 
    } else { 
     //User not logged in 
    } 
?> 

HTH.

Powiązane problemy