Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie za pomocą $_COOKIE
Forum PHP.pl > Forum > PHP
maly_pirat
Witam, pisałem ostatnio formularz logowania do serwisu, bazowałem na "myśli", którą padła w php-fusion.
Po prawidłowym logowaniu ustawiam cookie dla użytkownika, które wygląda w postaci:
ID-USER.USER-HASH

User Hash generuje się automatycznie podczas rejestracji (md5(uniqid());).
Proces logowania wygląda na zasadzie:

Kod
- Jeśli masz ciastko (idziesz dalej):
-- Rozbijam ciastko na ID, oraz Hash
--- SQL sprawdzam czy istnieje taki użytkownik (z tym ID + hash)
---- Jeśli tak to jesteś zalogowany


Jednak po paru chwilach miałem mieszane uczucia co do tego rozwiązania, bo przecież jeśli ktoś wygranie z komputera
owe ciastko, to będzie miał dostęp do jego konta. Lub też będzie znał jego hash (oczywiście hash nigdzie nie jest wyświetlany, przetrzymywany jest w bazie) i też będzie miał dostęp.

Tak więc czy ten sposób jest niebezpieczny? w jaki sposób powinien weryfikować użytkowników przy rejestracji (poza sesja) chciałbym aby auto logowanie było ON.

Chciałbym dodać, że każdą wartość, $_COOKIE filtruje przez mysql_real_escape_string.
Unik2psc
własna tablela USER_SESSION + $_SESSION[]
Table session:
user_id
user_session
session_time


tego tlumaczyć nie musze, a co do autologowania nie zrobisz inaczej niż na ciasteczkach chyba że oprzesz na/dodasz do tabeli:
session_ip
session_auto 0/1

ale w tym momencie moga byc konflikty (jesli ktos jest z sieci) lub jak ktos ma zmienne IP.

co do hasła - ja mam hasowane w sposób

sha1(LOGIN.':'.HASLO) + podniesienie loginu i hasla do duzych liter.
maly_pirat
Mógłbyś zbliżyć mi zarys całego projektu z "tabelą session" ? ewentualnie link do innego artykułu.

Rozumiem, że to będzie mniej więcej tworzyć sesje na X czas, jeśli sesia wygaśnie to cookie też wygaśnie - tak?
No, ale dobra sesia tam wygaśnie, ale z czasem nie da się manipulować ciastkiem? tzn. edytować dane?
Fifi209
Cytat(maly_pirat @ 10.08.2009, 10:59:17 ) *
Mógłbyś zbliżyć mi zarys całego projektu z "tabelą session" ? ewentualnie link do innego artykułu.


Na wortalu nawet masz o session handlerze. Leniu!
Unik2psc
Przykladowo Ci napisze bo teraz jestem w serwerowni.

Tabela user_session
id(opcjonalne - ale dla klucza auto_increment)
user_id
session_key
session_time

w session przy logowaniu ustawiasz user_id, session_key = key tworzy przy logowaniu wazne by bylo unikatowe. I sobie juz robisz przy sprawdzaniu czy ktos jest zalogowany czy jesli sessje jest mniejsza o 10minut niz aktualny czas (mktime()) to juz sessja jest nie wazna, gdy sessja jest wieksza to odswiezasz pole session_time (UPDATE MYSQL pola session_time).

Co do ciasteczek - wiesz jestem osoba ktora nigdy nic nie chce trzymac po stronie klienta (jakis taki nawyk) i probuje wychodzic na przekor wszystkiem i probowac. Wiec co do ciasteczek mozesz zrobic tak, dodac pole do user_session np o nazwie PERM_SESSION true|false (ttu nie musze pisac), a w ciasteczku dawac tylko klucz i user_id, przy sprawdzaniu zalogowania niecch z ciasteczek ciagnie te dane i porowna z tabela w bazie. Na szybko wiec przepraszam ze tak nie zrozumiale napisane pewnie.

A co postu nademna, za moich czasow to forum mnialo uczyc a nie pouczac. Wiem ze takie sprawy sa nudne i ze sa artykuly. Ale nie ma co sie zaslaniac albo nabijasz posty piszac len, albo piszesz z sensem odpowiedziec - albo nic nie piszesz. Troche niektorym sie juz pomieszalo z tym "masz google, masz artykul itp.".

Pozdrawiam.
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.