![]() |
![]() ![]() |
![]() |
![]()
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? |
|
|
![]()
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.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 15.02.2010 Ostrzeżenie: (10%) ![]() ![]() |
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... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 130 Pomógł: 11 Dołączył: 7.04.2003 Ostrzeżenie: (10%) ![]() ![]() |
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:.
|
|
|
![]()
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?
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 130 Pomógł: 11 Dołączył: 7.04.2003 Ostrzeżenie: (10%) ![]() ![]() |
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.
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:.
|
|
|
![]()
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.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 130 Pomógł: 11 Dołączył: 7.04.2003 Ostrzeżenie: (10%) ![]() ![]() |
session_set_save_handler - i masz po tych wszystkich problemach. Dzięki za link. Manuala PHP nigdy za dużo ![]() Ten post edytował smentek 26.03.2010, 20:58:29 -------------------- .:SMENTEK:.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 03:03 |