Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pyatnie o czystą semantykę zasad działania aplikacji..
Forum PHP.pl > Forum > Przedszkole
siemieng
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....
darko
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.
Nattfarinn
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.
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.