Gdzie są przechowywane zmienne $ _SESSION?

158

Czy $_SESSIONzmienne są przechowywane na kliencie czy serwerze?

Steve Gattuso
źródło
na serwerze, na którym uruchamiasz aplikację php, pod kątem konkretnej ścieżki musisz sprawdzić za pomocą phpinfo ()
densityx

Odpowiedzi:

168

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

rjamestaylor
źródło
129

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)

troelskn
źródło
41
+1, ponieważ zasugerowałeś, że pliki cookie nie przechowują zawartości $ _SESSION (te treści są przechowywane na serwerze, więc nie są podatne na modyfikacje przez klienta)
shufler
12
Doskonała odpowiedź! Szukałem pytania: „Dlaczego sesje wygasają po usunięciu pamięci podręcznej przeglądarki?”. I uratowałeś mi dzień.
Uczeń
2
serwer tworzy plik sess_7nu9p0fvidvva6ouaugqcc8292 i po wyświetleniu alertu przeglądarki (getCookie ('PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb
2
Plus1 - Aby odpowiedzieć na pytanie: „… przechowywane na kliencie lub serwerze?”
Alex Vargas
22

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ą.

Rob Kennedy
źródło
18

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”.

Gero
źródło
13

W Debianie (czy nie dotyczy to większości dystrybucji Linuksa?) Jest on zapisany w / var / lib / php5 /. Jak wspomniano powyżej, jest skonfigurowany w twoim php.ini.

Hans
źródło
12

Używam Ubuntu i moje sesje są przechowywane w / var / lib / php5.

Wasyl Teraz
źródło
1
Dzięki, to wszystko, czego chciałem. Tak, gdyby nie było ich w zwykłym miejscu, będę musiał złamać INI, ale chciałem tylko wiedzieć: „Hej, gdzie są zwykle przechowywane sesje ?” / var / lib / php / session / to jest.
Eric L.
7

Jak zauważył pan Taylor, jest to zwykle ustawione w pliku php.ini. Zwykle są przechowywane jako pliki w określonym katalogu.

Brian Fisher
źródło
4

W przypadku Ubuntu 16.10 sesje są zapisywane w / var / lib / php / session / ...

Lukáš Kříž
źródło
0

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.

Emeka Obianom
źródło
0

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
Ali A. Dhillon
źródło