Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesje - kilka logowan jednego usera
Forum PHP.pl > Forum > PHP
shycat
Witam, mam na mojej stronie autoryzacje uzytkownikow oparta na sesjach... i mam tutaj taki "problem", ktory w sumie umiem rozwiazac, ale zastanawiam sie nad jakims prostszym rozwiazaniem - jakas dedykowana funkcja php czy cos... problem polega na tym, ze uzytkownik loguje sie z jednego komputera, po chwili ktos loguje sie na konto tego samego usera z innego komputera... ktory przypuscmy ma taki sam adres IP i taka sama przegladarke... w jaki sposob mozna zrobic, zeby po ponownym logowaniu uzytkownik nr 1 zostal "wylogowany".

Moj pomysl jest taki, zeby w bazie danych utworzyc tabele 'sesja' (czy cos tongue.gif) skad bedzie pobierany SESSID i porownywany z tym z ciasteczka... jest jakis latwiejszy sposob?
azerty
Skoro komputer jest taki sam, ma to samo IP, ale komputer jest inny, to masz problem logiczny. Przekombinowane to troche. Ale nigdy nie wylogowuj jednego - zawsze wszystkie sesje zakoncz i pokaz informacje uzytkownikowi.
sadistic_son
W bazie przechowuj wartość liczbową, którą zapisujesz do ciasteczka a następnie zwiększasz o 1 w bazie. Przy każdej akcji usera porównujesz jego ciacho z wartością z bazy i jeśli w ciachu jest mniejsza niż w bazie to mu niszczysz sesję. W ten sposób każdorazowe logowanie na to samo konto zniszczy sesję poprzednią. Nie jest to super zabezpieczenie bo user może edytować swoje ciacho, ale zawsze coś. Dla większego bezpieczeństwa możesz na przykład zakodować wartość w ciachu używając base64_encode i rozkodować do sprawdzenia.
shycat
chodzilo mi o jakas dedykowana funkcje... ale skoro takiej nie ma (lub po prostu nie wspomnieliscie o niej), to moj pomysl wydaje mi sie (nie chwalac sie) lepszy... bo w sumie i tak za kazdym razem sa pobierane dane z tabeli dot uzytkownikow... wiec dodatkowa kolumna sesid, w ktorej bedzie hash aktualnej sesji i potem porownanie - jest lepszym sposobem niz pakowanie dodatkowego cookies'a...

ps. to, ze to samo IP i ta sama wersja przegladarki to nie jest zaden blad logiczny, ani tez nie jest to przekombinowane. Przyklad - 2-ch uzytkownikow tej samej sieci Lan, posiadajacych ta sama wersje przegladarki - np. zaktualizowanego FF'a...

ps2. ... base64 to zadne zabezpieczenie... z reszta nie sluzy tez do ich tworzenia wink.gif ... juz o wiele lepsze bylo by np. substr(md5('tajny_string smile.gif'.$id)),4,8);
zend
Do tabeli 'sesja' dorzuć kolumne z id użytkownika. Przy logowaniu sprawdzasz czy id użytkownika istnieje w tej tabeli, jeśli istnieje to usuwasz tamtą sesję, a tworzysz nową
shycat
Zend - no, no, o cos takiego mi wlasnie chodzilo ofc wink.gif ... z tym, ze ja mam tabele "uzytkownicy", gdzie sa po prostu dane uzytkownikow, takie tam pierdoly i tam dorzuce kolomne sesja, bo nie wiem czy jest sens robienia nowej tabeli "sesja" skoro tabela "uzytkownicy" jest sprawdzana z kazdym odswiezeniem
erix
Jest sens. Bo mogą być również użytkownicy niezalogowani.

A tabele sesyjne zwykle się w MySQL opiera na silniku MEMORY, o zaletach sobie poczytaj. wink.gif
shycat
Erix, poczytalem, hm, masz racje, nie znalem tego typu... wiec zwracam honor wink.gif i w takim razie uzyje tabeli typu MEMORY
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.