![]() |
![]() ![]() |
![]() |
![]()
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? ![]() |
|
|
![]()
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:
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.
|
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.07.2025 - 09:06 |