Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Pyatnie o czystą semantykę zasad działania aplikacji.., Obsługa sesji i użytkownika...
siemieng
post 9.11.2009, 12:37:38
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


Witam, tym razem chciałbym się poradzić w sprawie obsługi sesji oraz użytkownika. Na początku dodam, że nie chodzi tu o problem z działaniem, tylko o wybór w miarę logicznej, przejrzystej metody obsługi tych dwóch zagadnień. Może to lekkie przegięcie, że o to pytam, ale ostatnio pisząc coś skupiam się także na je nie za dużym poplątaniu i wymieszaniu wszystkiego...

Ja sesji używam od samego początku wejścia użytkownika na stronę, przechowując w niej ogólne dane użytkownika (przeglądarka, czas wejścia, obecny adres url oraz poprzedni adres url, identyfikator sesji, itd...). Do obsługi sesji jak i obsługi użytkownika posiadam osobne moduły (funkcje). Ustawienia zarówno sesji jak i użytkownika znajdują się w pliku .ini. I teraz szukam metody na oddzielenie danych sesji od danych użytkownika w obsłudze tych dwóch zagadnień. Mojego dziwnego problemu by nie było gdybym sesje używał tylko w przypadku zalogowanego użytkownika, obsługa sesji nie mieszała by się z obsługą użytkownika, ponieważ w momencie pojawienia się sesji, znaczy że użytkownik się zalogował i zaczyna się jej kontrola, ale tak nie mam....

Sprawa dotyczy ustawień sesji:
- aktywacja wygasania sesji - maksymalny czas trwania całej sesji oraz od ostatniej aktywności sesji (użytkownika);
- aktywacja regeneracji sesji - po określonym czasie oraz po określonej ilości żądań.

I teraz kłóci mi się obsługa tych parametrów ustawień w odniesieniu do danego modułu (sesja, użytkownik). Dla mnie logicznym jest, że te ustawienia dotyczą sesji, dlatego powinny być obsługiwane poprzez moduł obsługi sesji, ale nie ma sensu kontrolować czasu trwania sesji, czy regenerować jej id w przypadku gdy użytkownik nie jest zalogowany, bo to bez sensu. Natomiast umieszczenie ich obsługi w module użytkownika, gdzie mógłbym sprawdzić czy jest zalogowany i wtedy np. utworzyć zmienną $_SESSION['loginTime'] która by przechowywała czas zalogowania, i przy jej pomocy kontrolować czas sesji użytkownika, ale wtedy wszystkie ustawienia sesji przechodziły by pod obsługę modułu użytkownika, i to mi się kłóci. W drugą stronę, tzn. w module kontroli sesji sprawdzenie czasu trwania sesji wymagało by wcześniejszego sprawdzenia czy użytkownik jest zalogowany, np. $_SESSION['isLogged'] ale to mnie też kuje w oczy bo to dane użytkownika.

Wiem, że większości to o co pytam wyda się głupotą, może nawet nie będziecie wiedzieć tu tej małej niespójności, ale mam nadzieje, że niektórzy zrozumieją co mi po głowie lata:P Jak mogę sobie oddzielić obsługę sesji od użytkownika, czy to nie ma sensu?questionmark.gif? Podkreślam pytanie prawdopodobnie lekko abstrakcyjne....
Go to the top of the page
+Quote Post
darko
post 9.11.2009, 14:52:52
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Nie jestem pewien czy dobrze Cię zrozumiałem, ale w temacie oddzielenia danych sesji dotyczących użytkownika, a dotyczących innych kwestii (niezwiązanych z userem) polecam korzystanie ze spójnych przestrzeni nazw, tzn. łopatologicznie rzecz ujmując: zapisuj wszystkie zmienne w sesji, które są związane z userem jako np. $_SESSION["user_x"], zmienne wewnętrzne np. jako $_SESSION["system_x"], gdzie X to nazwa konkretnej danej. Powinno Ci to ułatwić pracę z userami i całą resztą danych które zapisujesz w sesji. Możesz później np. wyciągnąć wszystkie dane dotyczące usera:
  1. foreach($_SESSION as $key=>$val) {
  2. if(preg_match("user_",$key) {
  3. $user_data[$key]=$val;
  4. }
  5. }
  6. //voila!




Ps. ja jednak wolę nie zapisywać w sesji danych użytkowników niezalogowanych. Poza tym polecam dla przejrzystości hermetyzację danych w postaci klas User i Session (jeśli nie pracujesz na żadnym frameworku) i wszystko będzie miało ręce i nogi i wszystko pozostanie na swoim miejscu.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Nattfarinn
post 9.11.2009, 15:19:20
Post #3





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


Również nie jestem pewien czy dobrze zrozumiałem. Koncepcyjnie, obsługą użytkownika i jego danych powinien zajmować się moduł użytkownika który jednak wykorzystywałby moduł obsługi sesji. O ile to są oddzielne mechanizmy, tak mimo wszystko jeden powinien agregować drugi. Moduł użytkownika nie powinien mieć bezpośredniego dostępu do sesji skoro jest mechanizm i która za obsługę sesji odpowiada. Czyli poprawnie byłoby, gdyby to moduł sesji pośredniczył w wymianie surowych danych, których obsługą dopiero zajmowałby się moduł użytkownika. To moduł użytkownika decydowałby czy pewne dane sesji powinny istnieć czy zostać zniszczone ale nie robiłby tego sam - odpowiednie działanie wykonywałby za pośrednicwem modułu sesji.

Taka koncepcja jest naturalna, jeśli mamy do czynienia z programowaniem obiektowym.


--------------------
Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.
-- R. Pattis
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 09:06