Czy $_SESSIONzmienne są przechowywane na kliencie czy serwerze?
Czy $_SESSIONzmienne są przechowywane na kliencie czy serwerze?
Odpowiedzi:
Lokalizacja $_SESSIONpamięci zmiennych jest określana przez session.save_pathkonfigurację PHP . Zwykle dzieje się to /tmpw 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 DocumentRootTwojej 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 PHPSESSIDparametr 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_handlerzmiennej konfiguracyjnej i session_set_save_handlerdo kontrolowania sposobu zapisywania sesji na serwerze. Domyślną metodą zapisywania jest zapisywanie sesji do plików. Miejsce zapisania jest kontrolowane przez session.save_pathzmienną.
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 lsw tym katalogu tylko lsto 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.