Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie, wylogowywanie, trzymanie sesji
Forum PHP.pl > Forum > Przedszkole
matiit
W celach naukowych piszę sobie CMS'a.
Mam tam między innymi panel admina. Logowanie przebiega tak:
Na początku każdej strony jest session_start();
Logowanie: plik login.php dostaje od formularza postem login i haslo, login i hash hasła są sprawdzane w bazie danych, jeśli wszystko się zgadza tworzę $_SESSION['logged'] = 'yes';
I strona może wyświetlać 2 widoki - dla użytkownika zalogowanego i dla użytkownika niezalogowanego. Warunek zalogowania? Czy istnieje zmienna $_SESSION['logged'] i czy jest ustawiona na yes. Jeśli tak wyswietla się content dla zalogowanych, jeśli nie - wyświetla się content dla niezalgowanych, np. loginform.
Wylogowanie:
W skrócie:
  1. unset($_SESSION['logged']);

I pojawiają się 2 pytania... Czy jest to bezpieczne? Czy ktoś nie może sobie utworzyć zmiennej sesyjnej takiej jak podana i sie po prostu wbić?
Gdzie przechowywać takie dane jak id zalogowanego usera? Przydatne przy np. zmianie hasła.
Kshyhoo
  1.  
  2. if (isset($_SESSION['agent'])) {
  3. if ($_SESSION['agent'] <> $_SERVER['HTTP_USER_AGENT']) {
  4.  
  5. // tutaj wylogowanie, nastąpiła zmiana nagłówka
  6. // i ewentualne przekierowanie do strony z logowaniem
  7.  
  8.  
  9. }
  10. } else {
  11. $_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];
  12. }
  13.  
  14. // dalsza zawartość strony

W zmiennej sesyjnej $_SESSION['agent'] zapisujesz nazwę przeglądarki użytkownika, której użytkownik zwykle nie zmienia w czasie trwania sesji. Natomiast bardzo prawdopodobne jest, że osoba atakująca (przechwytująca sesję) będzie miała inny nagłówek HTTP_USER_AGENT.
matiit
Hm, ok, to jest chyba dobry pomysł (na pewno można jeszcze wiele rzeczy (; )
Jeszcze jedno... Można tworzyć client-side te zmienne sesyjne?
I czemu jak stosuję rozwiązanie to pierwsze swoje to dopóki się nie wyloguje jestem zalogowany? nawet jak zamknę i włącze ponownie przeglądarkę?
Kshyhoo
  1. if ($_SESSION["czas"] and $_SESSION["czas"]+60*30<time()) { // 30 minut i następuje wylogowanie
  2. echo "Sesja wygasła - nastąpiło automatyczne wylogowanie...";
  3. }
  4. $_SESSION["czas"] = time();

Automatyczne wylogowanie po 30 minutach
Spirit86
może lepiej załóż 2 zmienne:
  1. $_SESSION["username"]
  2. $_SESSION["md5password"]
i je przyrównuj, możesz rozpoznawać użytkowników, jak ktoś zmieni hasło, to od razu go wyloguje etc...
matiit
Ok dzięki... poprzerabiałem już klasę autoryzacji... dodałem jeszcze przy sprawdzaniu w bazie danych żeby zwracało id usera i zapisywało w $_SESSION['user_id']

Edit, chociaż jeszcze "Można tworzyć client-side te zmienne sesyjne?"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.