Pliki sesji są zwykle przechowywane, powiedzmy, /tmp/
na serwerze i nazywane sess_{session_id}
. Patrzyłem na zawartość i nie mogę dowiedzieć się, jak naprawdę działają.
Pobieranie nazwy i zawartości zmiennej z pliku jest łatwe. Ale skąd PHP wie, która sesja należy do kogo?
Session_id wydaje się całkowicie losowy, a jeden adres IP może mieć kilku użytkowników, a każdy użytkownik może mieć kilka sesji, jeśli ma otwarte więcej niż jedno okno przeglądarki.
Jak to działa?
Odpowiedzi:
W ogólnej sytuacji:
PHPSESSID
)Dane w plikach sesji to zawartość
$_SESSION
serializowana (tj. Reprezentowana jako ciąg - z funkcją taką jak serialize ) ; i jest usuwany z serializacji, gdy plik jest ładowany przez PHP, aby zapełnić$_SESSION
tablicę.Czasami identyfikator sesji nie jest przechowywany w pliku cookie, ale wysyłany również w adresach URL - ale w dzisiejszych czasach jest to dość rzadkie.
Aby uzyskać więcej informacji, możesz zajrzeć do sekcji Obsługa sesji w podręczniku, która zawiera przydatne informacje.
Na przykład istnieje strona o przekazywaniu identyfikatora sesji , która wyjaśnia, w jaki sposób identyfikator sesji jest przekazywany ze strony na stronę za pomocą pliku cookie lub w adresach URL - i jakie opcje konfiguracji mają na to wpływ.
źródło
Jak działa sesja PHP
Po pierwsze PHP tworzy 16-bajtowy unikalny numer identyfikacyjny (przechowywany jako ciąg 32 znaków szesnastkowych, np.
a86b10aeb5cd56434f8691799b1d9360
) Dla indywidualnej sesji.Plik cookie PHPSESSID przekazuje ten unikalny numer identyfikacyjny do przeglądarki użytkownika w celu zapisania tego numeru.
Na serwerze tworzony jest nowy plik o tej samej nazwie o unikalnym numerze identyfikacyjnym z prefiksem sess_ (tj
sess_a86b10aeb5cd56434f8691799b1d9360
.)Przeglądarka wysyła ten plik cookie do serwera przy każdym żądaniu.
Jeśli PHP otrzyma ten unikalny numer identyfikacyjny z pliku cookie PHPSESSID (przy każdym żądaniu), wówczas PHP szuka w katalogu tymczasowym i porównuje ten numer z nazwą pliku. Jeśli obie są takie same, pobiera istniejącą sesję, w przeciwnym razie tworzy nową sesję dla tego użytkownika.
Sesja zostaje zniszczona, gdy użytkownik zamyka przeglądarkę lub opuszcza witrynę. Serwer kończy również sesję po upływie określonego z góry czasu sesji. Są to proste kroki mechanizmu używane przez PHP do obsługi sesji. Mam nadzieję, że ten artykuł pomoże ci zrozumieć, jak działa PHP SESSION.
źródło
mysite.com/cart
. Otrzymam także moje „Hello Joe Doe, 5 wiadomości, oto lista Twoich zakupów ...”, czyli informacje o sesji. - Ale dlaczego przeglądarka w odniesieniu do tej pustej karty wysyłałaby jakikolwiek identyfikator sesji wraz z żądaniem GET? szybka aktualizacja: Ach, znalazłem odpowiedź: +)Identyfikator sesji jest rzeczywiście losowy i jest przekazywany w pliku cookie lub w adresie URL, w zależności od konfiguracji. Być może widziałeś już PHPSESSID = xxxx w niektórych adresach URL, istnieje również plik cookie o tej nazwie.
źródło
Sesje w PHP są uruchamiane za pomocą funkcji session_start (). Podobnie jak funkcja setcookie (), funkcja session_start () musi znajdować się na stronie przed jakimkolwiek kodem HTML, łącznie z pustymi wierszami. Będzie to wyglądać tak:
<?php session_start( );?><html><head>
....... itd. Funkcja session_start () generuje losowy identyfikator sesji i przechowuje go w pliku cookie na komputerze użytkownika (jest to jedyna informacja o sesji, która jest faktycznie przechowywana po stronie klienta. ) Domyślną nazwą pliku cookie jest PHPSESSID, chociaż można to zmienić w plikach konfiguracyjnych PHP na serwerze (większość firm hostingowych pozostawia to w spokoju.) Aby odwołać się do identyfikatora sesji w kodzie PHP, należy odwołać się do zmienna $ PHPSESSID (to nazwa ciasteczka; pamiętasz to z Cookies?)źródło