HTTP jest bez powodu protokołem bezstanowym. Sesje spawają stan na HTTP. Zasadniczo unikaj używania stanu sesji.
AKTUALIZACJA: Nie ma koncepcji sesji na poziomie HTTP; serwery zapewniają to, podając klientowi unikalny identyfikator i każąc mu przesłać go ponownie przy każdym żądaniu. Następnie serwer używa tego identyfikatora jako klucza do dużego zbioru skrótów obiektów sesji. Za każdym razem, gdy serwer otrzyma żądanie, wyszukuje informacje o sesji na podstawie tablicy obiektów sesji na podstawie identyfikatora przesłanego przez klienta z żądaniem. Cała ta dodatkowa praca to podwójny wpływ na skalowalność (duży powód, dla którego HTTP jest bezstanowy).
- Whammy One: Zmniejsza pracę, jaką może wykonać pojedynczy serwer.
- Whammy Two: utrudnia skalowanie, ponieważ teraz nie można po prostu skierować żądania do dowolnego starego serwera - nie wszystkie mają tę samą sesję. Możesz przypiąć wszystkie żądania o danym identyfikatorze sesji do tego samego serwera. To nie jest łatwe i jest to pojedynczy punkt awarii (nie dla całego systemu, ale dla dużych części użytkowników). Możesz też współużytkować pamięć sesji na wszystkich serwerach w klastrze, ale teraz masz większą złożoność: pamięć podłączoną do sieci, autonomiczny serwer sesji itp.
Biorąc to wszystko pod uwagę, im więcej informacji umieścisz w sesji, tym większy będzie wpływ na wydajność (jak zauważa Vinko). Również, jak zauważa Vinko, jeśli twój obiekt nie jest możliwy do serializacji, sesja będzie się źle zachowywać. Dlatego z zasady unikaj stawiania w sesji więcej niż absolutnie konieczne.
@ Vinko Zazwyczaj można obejść stan magazynu serwera, osadzając śledzone dane w odpowiedzi, którą odsyłasz i zlecając ponowne przesłanie przez klienta, np. Wysyłając dane w ukryty sposób. Jeśli naprawdę potrzebujesz śledzenia stanu po stronie serwera, prawdopodobnie powinien on znajdować się w magazynie danych kopii zapasowej.
(Vinko dodaje: PHP może używać bazy danych do przechowywania informacji o sesji, a ponowne przesłanie danych przez klienta za każdym razem może rozwiązać potencjalne problemy ze skalowalnością, ale otwiera dużą puszkę problemów związanych z bezpieczeństwem, na które należy teraz zwrócić uwagę, ponieważ klient kontroluje wszystkie Twój stan)