Czy $_SESSION
zmienne są przechowywane na kliencie czy serwerze?
Czy $_SESSION
zmienne są przechowywane na kliencie czy serwerze?
Odpowiedzi:
Lokalizacja $_SESSION
pamięci zmiennych jest określana przez session.save_path
konfigurację PHP . Zwykle dzieje się to /tmp
w systemie Linux / Unix. Użyj tej phpinfo()
funkcji, aby wyświetlić określone ustawienia, jeśli nie masz 100% pewności, tworząc plik z następującą zawartością w DocumentRoot
Twojej domenie:
<?php
phpinfo();
?>
Oto link do dokumentacji PHP na temat tego ustawienia konfiguracji:
http://php.net/manual/en/session.configuration.php#ini.session.save-path
Jak już wspomniano, zawartość jest przechowywana na serwerze. Jednak sesja jest identyfikowana przez identyfikator sesji, który jest przechowywany u klienta i wysyłany z każdym żądaniem. Zwykle identyfikator sesji jest przechowywany w pliku cookie, ale można go również dołączyć do adresów URL. (To PHPSESSID
parametr zapytania, który czasami widzisz)
Zazwyczaj są przechowywane na serwerze. Miejsce ich przechowywania zależy od Ciebie jako programisty. Możesz użyć session.save_handler
zmiennej konfiguracyjnej i session_set_save_handler
do kontrolowania sposobu zapisywania sesji na serwerze. Domyślną metodą zapisywania jest zapisywanie sesji do plików. Miejsce zapisania jest kontrolowane przez session.save_path
zmienną.
Jeden dodatek: należy zauważyć, że w przypadku, gdy „/ tmp” jest katalogiem, w którym przechowywane są dane sesji (co wydaje się być wartością domyślną), sesje nie będą się utrzymywać po ponownym uruchomieniu tego serwera WWW, ponieważ „/ tmp „jest często czyszczony podczas ponownego uruchamiania. Koncepcja trwałości z punktu widzenia klienta obowiązuje wraz z trwałością pamięci masowej na serwerze - co może się nie powieść, jeśli do danych sesji używany jest katalog „/ tmp”.
Używam Ubuntu i moje sesje są przechowywane w / var / lib / php5.
Jak zauważył pan Taylor, jest to zwykle ustawione w pliku php.ini. Zwykle są przechowywane jako pliki w określonym katalogu.
W przypadku Ubuntu 16.10 sesje są zapisywane w / var / lib / php / session / ...
Jak to działa? Skąd wie, że to ja?
Większość sesji ustawia klucz użytkownika (nazywany identyfikatorem sesji) na komputerze użytkownika, który wygląda mniej więcej tak: 765487cf34ert8dede5a562e4f3a7e12. Następnie, gdy sesja jest otwierana na innej stronie, skanuje komputer w poszukiwaniu klucza użytkownika i biegnie do serwera, aby pobrać zmienne.
Jeśli omyłkowo wyczyścisz pamięć podręczną, Twój klucz użytkownika również zostanie wyczyszczony. Nie będziesz już mógł pobrać zmiennych z serwera, ponieważ nie znasz swojego identyfikatora.
Na moim komputerze z Ubuntu sesje są przechowywane pod adresem
/var/lib/php/sessions
i musisz sudo ls
w tym katalogu tylko ls
to rzuci
ls: nie można otworzyć katalogu „.”: Odmowa dostępu
A na moim serwerze Windows Wamp sesje php są przechowywane w plikach
C:\wamp64\tmp
a jeśli zainstalujesz samodzielny php w systemie Windows, nie ma domyślnej wartości
session.save_path => no value => no value
Wiele z powyższych odpowiedzi jest niejasnych. Moim zdaniem autor tego pytania po prostu chce wiedzieć, gdzie domyślnie przechowywane są zmienne sesji. Zgodnie z tym: https://canvas.seattlecentral.edu/courses/937693/pages/10-advanced-php-sessions są one po prostu domyślnie przechowywane na serwerze . Miejmy nadzieję, że inni uznają ten wkład za znaczący.