2009-10-08 12 views
93

Pliki sesji są zwykle przechowywane na serwerze pod numerem /tmp/ i mają nazwę sess_{session_id}. Przeglądam zawartość i nie mogę zrozumieć, jak naprawdę działają.Jak działają sesje PHP? (nie "w jaki sposób są one używane?")

Pobieranie nazwy zmiennej i zawartości z pliku jest łatwe. Ale skąd PHP wie, do kogo należy sesja?

Identyfikator sesji wydaje się być 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?

+0

Zobacz http://stackoverflow.com/questions/523703/is-my-understanding-of-php-sessions-correct – adatapost

Odpowiedz

156

W ogólnej sytuacji:

  • identyfikator sesji jest wysyłana do użytkownika, kiedy jego sesja jest tworzony.
  • jest przechowywany w pliku cookie (tzw domyślnie PHPSESSID)
  • że plik cookie jest wysyłane przez przeglądarkę do serwera z każdego żądania
  • serwera (PHP) wykorzystuje te ciasteczka, zawierający session_id, aby wiedzieć, który plik odpowiada temu użytkownikowi.

Dane w plikach sesji jest treść $_SESSION, szeregowane (tj reprezentowany jako ciąg - z funkcji takich jak serialize); i nie jest serializowane, gdy plik jest ładowany przez PHP, aby wypełnić tablicę $_SESSION.


Czasami identyfikator sesji nie jest przechowywany w pliku cookie, ale również wysyłany w adresach URL - ale jest to dość rzadkie w dzisiejszych czasach.


Aby uzyskać więcej informacji, zapoznaj się z rozdziałem Session Handling podręcznika, który zawiera przydatne informacje.

Na przykład istnieje strona o numerze Passing the Session ID, która wyjaśnia, w jaki sposób identyfikator sesji jest przesyłany ze strony na stronę, za pomocą pliku cookie lub w adresach URL - i jakie opcje konfiguracji mają na to wpływ.

+4

Super wyjaśnienie. Dziękuję bardzo :) – Christoffer

+1

Nie ma za co :-) –

+5

W jaki sposób urządzenie mobilne (z natywnej aplikacji) obsługuje sesje w normalny sposób? Przechowywanie identyfikatora sesji? A może nadszedł czas na OAuth? –

4

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 już widziałeś ten PHPSESSID = xxxx w niektórych adresach URL, jest też plik cookie o tej nazwie.

1

Sesje w PHP są uruchamiane za pomocą funkcji session_start(). Podobnie jak funkcja setcookie(), funkcja session_start() musi znajdować się przed jakimkolwiek HTMLem, w tym pustymi liniami na stronie. Będzie wyglądać tak: <?php session_start();?><html><head> ....... itp. ... Funkcja session_start() generuje losowy identyfikator sesji i zapisuje go w pliku cookie na komputerze użytkownika (jest to jedyna informacja o sesji, która jest faktycznie przechowywana na komputerze). 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 pozostawi to jednak w spokoju). Aby odwołać się do identyfikatora sesji w Twoim kodzie PHP, będzie zatem odwoływać się do zmiennej $ PHPSESSID (jest to nazwa pliku cookie, pamiętasz to z plików cookie?)

7

Jak działa PHP Session Works

  • Po pierwsze PHP tworzy długi unikalny numer 16-bajtowy identyfikator (zapisany jako ciąg 32 znaków w systemie szesnastkowym, np a86b10aeb5cd56434f8691799b1d9360) w przypadku indywidualnego sesji.

  • Plik cookie PHPSESSID przekazuje ten unikalny numer identyfikacyjny do przeglądarki użytkownika, aby zapisać ten numer.

  • Nowy plik jest tworzony na serwerze o tej samej nazwie z unikalnym numerem identyfikacyjnym z sess_ prefiksem (tj sess_a86b10aeb5cd56434f8691799b1d9360.)

  • Przeglądarka wysyła to ciasteczko do serwera z każdego żądania.

  • Jeśli PHP otrzyma ten unikalny numer identyfikacyjny z pliku cookie PHPSESSID (na każde żądanie), wówczas PHP wyszukuje w katalogu tymczasowym i porównuje tę liczbę z nazwą pliku. Jeśli oba są takie same, to pobiera istniejącą sesję, w przeciwnym razie tworzy nową sesję dla tego użytkownika.

Sesja zostaje zniszczona, gdy użytkownik zamknie przeglądarkę lub opuści witrynę. Serwer kończy także sesję po upływie określonego czasu sesji. Są to proste kroki mechanizmu, które PHP używa do obsługi sesji. Mam nadzieję, że ten artykuł pomoże ci zrozumieć, jak działa PHP SESSION.

Zobacz ten artykuł, aby uzyskać więcej informacji. How Does PHP Session Works

Powiązane problemy