Co to są pliki cookie i sesje i jak są ze sobą powiązane?


86

Staram się profesjonalnie rozumieć pliki cookie i sesje. Wiem, że kiedy przeglądarka łączy się z serwerem, serwer „prosi” przeglądarkę o „wklejenie” pliku cookie z „phpsessid” w folderze plików cookie przeglądarki klienta.

Teraz, gdy mamy "phpsessid", jeśli klient wchodzi na serwer, przeglądarka wysyła do serwera "phpsessid", a serwer sprawdza folder tmp i jeśli mamy dopasowanie, wczytuje z powrotem wszystkie dane użytkownika tego klienta, ale jestem trochę zdezorientowany z procesem.

Będę wdzięczny, jeśli ktoś pomoże mi zrozumieć procesy tworzenia sesji i plików cookie - co dzieje się za kulisami.


Wygląda na to, że już wiesz, co się dzieje. W której konkretnej części chciałbyś zostać oświecony? Część HTTP / cookie, czyli jak PHP ładuje magazyn sesji?
mario,

Plik cookie, który przeglądarka zapisuje wraz z phpsessid, czy jest to phpsessid do identyfikacji klienta do tworzenia sesji i plików cookie?
Blanktext

Plik cookie, który ma przeglądarka, zawiera identyfikator sesji php, który mówi serwerowi "hej, znam tego faceta", serwer następnie pobiera dane sesji (na przykład z / tmp /) i przywraca użytkownika $ _SESSION
somedev

Tak, wiem to, ale pytam, czy ten "phpsessid" używa do identyfikacji klienta przed utworzeniem sesji i ciasteczek, czy ten phpsessid znajduje się wewnątrz danych ciasteczka i komputera klienta oraz wewnątrz pliku sesji w folderze tmp serwera ?
Blanktext

Odpowiedzi:


171

Przejdźmy przez to:

Pliki cookie i sesje to sposoby na zachowanie stanu aplikacji między różnymi żądaniami wysyłanymi przez przeglądarkę. To dzięki nim na przykład nie musisz się logować za każdym razem, gdy żądasz strony w StackOverflow .

Ciasteczka

Pliki cookie to małe fragmenty danych (o długości maksymalnie 4 KB), które przechowują dane w parach klucz = wartość:

name=value; name2=value2

Są one ustawiane przez JavaScript lub przez serwer przy użyciu nagłówka HTTP .

Pliki cookie mają ustawioną datę ważności, na przykład przy użyciu nagłówków HTTP:

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

Co spowodowałoby, że przeglądarka ustawiłaby plik cookie o nazwie name2o wartości value2, który wygaśnie za około 9 lat.

Pliki cookie są uważane za wysoce niebezpieczne, ponieważ użytkownik może łatwo manipulować ich zawartością. Dlatego zawsze należy sprawdzać poprawność danych z plików cookie . Nie zakładaj, że to, co otrzymujesz z pliku cookie, jest koniecznie tym, czego oczekujesz.

Pliki cookie są zwykle używane do zachowania stanu logowania, w którym nazwa użytkownika i specjalny skrót są wysyłane z przeglądarki, a serwer sprawdza je w bazie danych, aby zatwierdzić dostęp.

Pliki cookie są również często używane do tworzenia sesji .

Sesje

Sesje są nieco inne. Każdy użytkownik otrzymuje identyfikator sesji , który jest odsyłany z powrotem do serwera w celu weryfikacji przez plik cookie lub zmienną GET .

Sesje są zwykle krótkotrwałe, co czyni je idealnymi do zapisywania stanu tymczasowego między aplikacjami. Sesje wygasają także po zamknięciu przeglądarki przez użytkownika.

Sesje są uważane za bezpieczniejsze niż pliki cookie, ponieważ same zmienne są przechowywane na serwerze . Oto jak to działa:

  1. Serwer otwiera sesję (ustawia plik cookie przez nagłówek HTTP)
  2. Serwer ustawia zmienną sesji.
  3. Strona zmian klienta
  4. Klient wysyła wszystkie pliki cookie wraz z identyfikatorem sesji z kroku 1.
  5. Serwer odczytuje identyfikator sesji z pliku cookie.
  6. Serwer dopasowuje identyfikator sesji z listy w bazie danych (lub pamięci itp.).
  7. Serwer znajduje dopasowanie, czyta zmienne, które są teraz dostępne w $_SESSIONsuperglobalu.

Jeśli PHP nie znajdzie dopasowania, rozpocznie nową sesję i powtórzy kroki od 1 do 7.

Możesz przechowywać poufne informacje w sesji, ponieważ są one przechowywane na serwerze, ale pamiętaj, że identyfikator sesji może nadal zostać skradziony, jeśli użytkownik, powiedzmy, zalogował się przez niezabezpieczone WiFi. (Atakujący może wąchać pliki cookie i ustawić je jako własne, nie zobaczy samych zmiennych, ale serwer zidentyfikuje atakującego jako użytkownika).


To jest istota tego. Możesz dowiedzieć się więcej w podręczniku PHP na oba tematy.


1
Czy to oznacza, że ​​pliki cookie muszą być włączone, aby sesje działały?
bigpotato

1
@Edmund: W większości przypadków tak. Można jednak ustawić go tak, że identyfikatory sesji są przesyłane za pośrednictwem zmiennej GET (co oznaczałoby, że session_id musiałyby być dołączany do każdej strony ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Madary Duchów

Co dokładnie oznacza zamknięcie przeglądarki na urządzeniach z systemem Android lub iPhone? zatrzymać aplikację? wyłączyć urządzenie? zamknąć wszystkie karty i wyjść? etc
Vandervals

2
@SurajJain Byłoby, gdyby nie ciasteczka „pamiętaj mnie”, które przetrwałyby dłużej.
Madara's Ghost

4
inne pytanie: kiedy użytkownik zamyka przeglądarkę, w jaki sposób serwer otrzymuje powiadomienie o tym zdarzeniu, aby serwer usunął ten identyfikator sesji? czy po pewnym czasie wygasa automatycznie?
user2774480
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.