Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmienne sesji w Singleton
tua1
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 23.10.2009

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


Witam

Pytanie trochę banalne, ale jak to jest z singletonami w PHP.
Wszyscy klienci strony korzystają z tego samego egzemplarza?

Chodzi mi dokładnie o to, czy mogę stworzyć rejestr potrzebnych danych sesji w innych częściach systemu, w którym będę przechowywał id, nazwę użytkownika itd.
Wiem, że mogę użyć po prostu $_SESSION, ale chcę żeby o tej tablicy wiedziała tylko klasa odpowiedzialna za autoryzację.

Czy mogę w takim przypadku użyć singletona jako reprezentacji klasy SessionRegistry, czy jest to kompletnie bezsensu bo dane te mogą zostać w każdej chwili podmienione przez inne żądanie?



Go to the top of the page
+Quote Post
Mephistofeles
post
Post #2





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Nie. Singleton jest globalny dla jednego wykonania skryptu.
Go to the top of the page
+Quote Post
kfx
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.02.2010

Ostrzeżenie: (10%)
X----


jedynie sesja, zeby pamietalo request po requescie.
mozesz ew. dac w sesji tylko jakis klucz fragment danych, a np. klasa autoryzacji doklei sobie odpowiednie wartosci i odczyta odpowiednie dane i tylko ta klasa bedzie wiedziala gdzie ma czego szukac.

cos jednak musi w sesji byc...
Go to the top of the page
+Quote Post
smentek
post
Post #4





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Cytat
Pytanie trochę banalne, ale jak to jest z singletonami w PHP.
Wszyscy klienci strony korzystają z tego samego egzemplarza?


Nie ma możliwości współdzielenia obiektów pomiędzy klientami. Każdy posiada oddzielny proces i oddzielne obiekty. Niezależnie czy obiekty budowane są na wzorcu Singletona czy nie.

Cytat
Chodzi mi dokładnie o to, czy mogę stworzyć rejestr potrzebnych danych sesji w innych częściach systemu, w którym będę przechowywał id, nazwę użytkownika itd.
Wiem, że mogę użyć po prostu $_SESSION, ale chcę żeby o tej tablicy wiedziała tylko klasa odpowiedzialna za autoryzację.


Odwoływanie się bezpośredino do globalnej tablicy $_SESSION jest złą praktyką. Najlepiej stworzyć sobie obiekt odpowiedzialny za obsługę tej że tablicy. Najlepiej aby obiekt ten oparty był na wzorcu Registry lub podobnym.


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Odwoływanie się bezpośredino do globalnej tablicy $_SESSION jest złą praktyką.
A to niby dlaczego? Jakieś konkretne powody?
Go to the top of the page
+Quote Post
smentek
post
Post #6





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Powodów jest sporo. Jeden przykładowy:

Odwołując się do zmiennych o charakterze globalnym. (Zmienne w $_SESSION są to defakto zmnienne globalne) łatwo jest o przypadkowe błędy. Jednym z częściej występujących błędów przy kożystaniu z gołej tablicy $_SESSION jest nadpisanie wcześniej umieszczonych w niej zmiennych.


  1. // Piszemy obiekt A i chcemy przechowywac go w sesji
  2. // Wrzucamy obiekt do sesji.
  3. $_SESSION['klucz'] = $objectA
  4.  
  5. // A po pararu miesiącach wracamy do kodu i piszemy inny obiekt B i także chcemy przechowywać go w sesji
  6. $_SESSION['klucz'] = $objectB


Teraz mamy dwa obiekty które kozystają z tego samego klucza. Nie pamietaliśmy bowiem, że nazwa 'klucz' została wcześniej zarezerwowana.

Używając Registry możemy np. zrzucić na sam obiekt odpowiedzialność za to, aby nadał on sobie unikalny w skali systemu identyfikator. Tak, że wyżej opisywana sytuacjia nigdy nie będzie miała szansy wystąpić.

Możemy też ograniczyć wrzucane do sesji obiekty do określonych typów. Tak że nigdy nie wrzucimy do sesji obiektu, który nie miał sie tam znaleźć i który może wyskoczyć z niej kiedyś powodując problemy.

Itd. itp.


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


session_set_save_handler - i masz po tych wszystkich problemach.
Go to the top of the page
+Quote Post
smentek
post
Post #8





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Cytat(Crozin @ 26.03.2010, 20:38:51 ) *
session_set_save_handler - i masz po tych wszystkich problemach.


Dzięki za link. Manuala PHP nigdy za dużo smile.gif A teraz skorzystaj ze swojego linku i przeczytaj - przeczytaj dokładne - co sie za nim kryje. Jak to się ma do problemów związanych z sesją takich jak ten który opisałem wcześniej?

Ten post edytował smentek 26.03.2010, 20:58:29


--------------------
.:SMENTEK:.
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 Aktualny czas: 21.08.2025 - 03:03