Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] sesje i klasa user
Forum PHP.pl > Forum > PHP
wiiir
Chcialbym abyscie podpowiedzieli mi czy ma cos takiego sens i sie oplaca robic, mianowicie:
Poniewaz i tak bede pisal klase user ktrora bedzie trzymac dane i zarzadzac userem pomyslalem sobie ze "moze" fajnie bedzie trzymac w sesji caly ten obiekt zamiast zwyklego np $_SESSION['id_user'].

Czy to jest dobry pomysl?
Bo w sumie pozniej napisze sobie tylko metody jak getIdUser ktore beda zwracac mi dane tak samo sesje chcialbym tworzyc przez setIdUser (te nazwy funckje teraz tak wymyslam tylko ) pozniej tylko caly obiekt wlozylbym do sesji oczywiscie wczesniej stworzyl bym przeznacza na to przestrzen dla sesji np $_SESSION['session'] = new User();
lDoran
i na co Tobie cały obiekt w sesji?
Noidea
Pomysł jest dobry, tylko musisz się zastanowić nad synchronizacją danych z obiektu User z tymi z bazy danych. Np. gdy administrator zmieni użytkownikowi login, albo wstawi mu bana, to ma to mieć wpływ na użytkownika zaraz po odświeżeniu przez niego strony, a nie dopiero po ponownym zalogowaniu się.

Jeśli zrobisz to dobrze, to masz bardzie obiektowe podejście do pisania w PHP + jedno zapytanie mniej podczas wyświetlania strony.
wiiir
Cytat(Noidea @ 6.09.2010, 12:58:27 ) *
Np. gdy administrator zmieni użytkownikowi login, albo wstawi mu bana, to ma to mieć wpływ na użytkownika zaraz po odświeżeniu przez niego strony, a nie dopiero po ponownym zalogowaniu się.


No wlasnie tez nad tym myslalem i jeszcze nie wiem jak to zrobic smile.gif
Noidea
Wstaw sobie do tabelki z użytkownikami dodatkową kolumnę, w której będziesz przechowywał ich ostatnie ID sesji. Dodatkowo potrzebujesz sposobu na odczytanie danych sesyjnych na podstawie tego ID. Sposoby są dwa:


1. Własny "session save_handler" i zapisywanie danych sesji w bazie (lub innym łatwo dostępnym miejscu) + odczyt zserializowanych danych sesyjnych użytkownika + unserialize/serialize
2. I moim zdaniem bardziej hardkorowe: Tymczasowa zmiana sesji administratora na sesję użytkownika, modyfikacja zmiennych, powrót do sesji administratora (session_id, session_write_close i inne)


I teraz administrator, gdy chce zbanować użytkownika to:
- zapisuje w bazie danych w tabeli z użytkownikami, że jest zbanowany
oraz:
- odczytuje sessionID użytkownika
- uzyskuje dostęp do jego sesji
- usuwa informację o "zalogowaniu użytkownika" z sesji

Zalogowany zbanowany użytkownik, gdy odświeży stronę nie będzie już zalogowany (bo admin usunął ta informację z jego sesji), a po próbie zalogowania się na stronie dostanie info, że dostał bana.


Oczywiście jest to trochę ciężkie do napisania. O wiele prościej przy każdym wyświetleniu strony robić
  1. SELECT * FROM users WHERE user_id = $SESSION['user_id']

i na tej podstawie sprawdzać, czy jest zbanowany itp., ale wtedy nie potrzebujesz obiektu klasy User trzymać w sesji - wystarczy samo ID użytkownika.
wiiir
nie napisalem w poscie ale wlasnie mam juz handlera napisanego.
Twoj opisany sposob jest dobry tyle mozna to zrobic na normalnej tablicy sesyjnej

bylo by dobrze gdyby mozna bylo zrobic tak
  1. SELECT * FROM session s WHERE s.value_session->id = idusera

ale to kompletna glupota raczej biggrin.gif
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.