Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] sesje i klasa user
wiiir
post
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


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();
Go to the top of the page
+Quote Post
lDoran
post
Post #2





Grupa: Zarejestrowani
Postów: 172
Pomógł: 13
Dołączył: 15.11.2009

Ostrzeżenie: (0%)
-----


i na co Tobie cały obiekt w sesji?
Go to the top of the page
+Quote Post
Noidea
post
Post #3





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
wiiir
post
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Noidea
post
Post #5





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Noidea 6.09.2010, 12:48:11
Go to the top of the page
+Quote Post
wiiir
post
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował wiiir 6.09.2010, 13:01:00
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 11:29