Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zapamietaj mnie w formularzu logowania
Forum PHP.pl > Forum > Przedszkole
elmozaur
Witam.

Jakis czas temu napisalem na wlasne potrzeby system logowania oparty o sesje i baze danych.
Chcialbym do tego dopisac teraz checkbox do zapamietania uzytkownika jako stale zalogowanego.

Problem niby banalny bo po poprawnym zalogowaniu wystarczy dac setcookie z id usera, ip kompa i przegladarke z ktorej sie logowal.
No ale jesli ktos wylapie takie ciastko to system lezy.
Sprawa druga to kwestia taka ze ip logujacego moze sie np zmienic i co wtedy ?

czy moge prosic o podpowiedz jak podejsc do tego tematu uwzgledniajac wspolczesne kwestie bezpieczenstwa takiego autologowania


za wszelka pomoc z gory dziekuje i pozdrawiam
Grzegorz
Michael2318
Przy zaznaczeniu checkbox'a ładujesz do bazy temu użytkownikowi losowy ciąg znaków, najlepiej dosyć skomplikowany i długi. Do tego możesz zapisać np. jego user_agent w tym momencie i też zapisać do do bazy. Tworzysz ciasteczko z zawartością tego losowego ID i na starcie, przed samym logowaniem na strone, umieszczasz kod, ktory sprawdza czy ciasteczko (nazwijmy je sobie 'autologin') istnieje, a jeśli istnieje to sprawdzasz w bazie do jakiego usera jest to ID przypisane. Jeśli znajdziesz tego usera to sprawdzasz dodatkowo czy user_agent logującego zgadza się z tym zapisanym wcześniej w bazie. Jeśli wszystko jest OK to normalnie go logujesz i dla bezpieczeństwa możesz wygenerować nowy, losowy ciąg znaków i zaktualizować go w bazie + zmienić zawartość ciasteczka. W przypadku niepowodzenia niszczysz to ciasteczko, wiadomo.
elmozaur
Cytat(Michael2318 @ 9.02.2013, 23:48:26 ) *
Tworzysz ciasteczko z zawartością tego losowego ID i na starcie, przed samym logowaniem na strone, umieszczasz kod, ktory sprawdza czy ciasteczko


ciastko z losowym stringiem czy ciastko z id rekordu ? (rekord zawiera user_agenta losowy string itp.)

I ostatnie pytanie bo jesli umieszcze tego typu mechanizm w pliku index.php to czy bedziemi sie to sprawdzalo przy kazdym zaladowaniem strony czy tylko podczas probu logowania ? (zakladam ze np logowanie i prosta tresc to ten sam plik)

pozdrawiam
G
Michasko
1. Losowy string i 'losowe ID' zostały tam użyte zamiennie. Czyli masz ciastko o nazwie 'autologin' z wartością 'losowy_string'. W bazie masz np. tabelę:
Kod
user_id | losowy_string | user_agent
i przy wywołaniu skryptu sprawdzasz czy w bazie istnieje takie ID jak w ciasteczku, i jeśli tak - sprawdzasz, czy user_agent się zgadza. Jeśli się zgadza, to logujesz użytkownika o zgodnym z tymi danymi user_id.
2. Jeśli umieścisz w jakimś pliku (u Ciebie ten index.php) to będzie wykonywane za każdym razem, gdy ktoś odwiedzi tą stronę (o adresie index.php). Należy dodać warunek, żeby się wykonywało tylko w przypadku, gdy użytkownik nie jest zalogowany.
elmozaur
no tak teraz rozumie. dzieki
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.