Czy istnieją limity dla zmiennych sesji?

Jak mówi tytuł, Czy istnieją limity (jeśli istnieją) dla zmiennych sesji lub są one traktowane jako zwykłe zmienne i mogą przechowywać taką samą ilość danych?

Szukam, czy są jakieś inne ograniczenia oprócz zmiennych typu takich jak max długość, max wartości i tak dalej.

P. S. Jeśli pytanie jest niejasne, proszę dać mi znać.

Z góry dzięki!

Author: jolt, 2010-11-25

4 answers

Jak powiedział @Thariama, nie ma ograniczeń co do liczby zmiennych; również nie ma ograniczeń co do ilości danych, które można przechowywać w sesji (widziałem sesje o rozmiarze kilkudziesięciu MB).

Gdy rozmiar sesji staje się większy, możesz napotkać różne dziwactwa: PHP 5 deserializuje całą sesję do pamięci w session_start() (używając domyślnego programu obsługi sesji - możesz stworzyć własne rozwiązanie , oczywiście); z sesją 20 MB i 50 jednoczesnymi użytkownikami, Twoje Skrypty zaczynają być "uruchamianie skryptów jest powolne jak melasa" - same sesje byłyby pochwycone GB PAMIĘCI RAM); w końcu poświęciliśmy pudełko, aby zachować jak najwięcej sesji w pamięci RAM, a pudełka frontend uzyskiwały dostęp do nich przez NFS (chociaż pomogło to w naszym przypadku, może to być dla Ciebie przesada).

Zauważ, że w przypadku wielu jednoczesnych użytkowników i przechowywania sesji na dysku liczba plików tymczasowych sesji może powodować problemy z ograniczeniami systemu plików (np. pliki mogą znajdować się w jednym katalogu, zanim napotkasz problemy z stat() wydajność ) lub inne ograniczenia (kiedyś okazało się, że skrzynka została skonfigurowana tak, aby zezwalała na otwieranie plików tylko 4096 w tym samym czasie). Nic z tego nie jest tak naprawdę specyficzne dla sesji, ale może być wywołane przez obsługę sesji.

 50
Author: Piskvor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:27

Nie, Nie ma limitu przestrzeni, jaką może mieć sesja (lub ile zmiennych może posiadać sesja). Jedynym ograniczeniem jest specyfikacja na twoim komputerze, jest ona definiowana przez dostępne memory_limit w Twoim php.ini . Należy pamiętać, że przestrzeń ta będzie współdzielona między wszystkimi sesjami dla wszystkich użytkowników.

 15
Author: Thariama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-25 08:30:45

Jest to całkowicie specyficzne dla Twojego serwera www. Dla Apache zajrzyj tutaj:

Http://httpd.apache.org/docs/trunk/mod/mod_session.html

To nawet pozwala na przechowywanie sesji w bazie danych za pomocą mod_session_dbd. Dlatego można pokonać fizyczne limity, takie jak 1 plik na sesję. Co więcej, Apache może być skonfigurowany do śledzenia sesji poszczególnych użytkowników przechowywanych na określonym serwerze lub grupie serwerów w celu skalowalności.

 8
Author: shamittomar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-25 01:47:57

Prosta odpowiedź brzmi nie. (Oznacza to, że nie mają więcej ograniczeń niż jakakolwiek inna zmienna PHP... musi pasować do pamięci itp.)

Należy jednak pamiętać, że {[0] } dane są przechowywane gdzieś, domyślnie jako dane serializowane w jednym pliku na sesję. Istnieją więc praktyczne ograniczenia. Nie chciałbyś przechowywać w nich ogromnej plamy informacji, ponieważ byłyby one ładowane/zapisywane z magazynu danych na każdej stronie, która używa session_start().

 3
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-25 08:27:49