Cosa sono i cookie e le sessioni e come si relazionano tra loro?


86

Sto cercando di capire i cookie e le sessioni in modo professionale. So che quando un browser si connette a un server, il server "chiede" al browser di "incollare" un cookie con "phpsessid" nella cartella dei cookie del browser del client.

Ora che abbiamo "phpsessid", se il client entra nel server il browser invia al server "phpsessid" e il server dà un'occhiata alla cartella tmp e se abbiamo una corrispondenza carica indietro tutti i dati che l'utente ha per questo cliente, ma sono un po 'confuso con il processo.

Sarò grato se qualcuno mi potrà aiutare a capire quei processi di creazione di una sessione e cookie - cosa sta succedendo dietro le quinte.


Sembra che tu sappia già cosa sta succedendo. Su quale parte specifica vorresti essere illuminato? La parte HTTP / cookie o come PHP carica il session store?
mario

Il cookie che il browser sta salvando con phpsessid, è questo il phpsessid per identificare il client per la creazione di sessioni e cookie?
Blanktext

Il cookie del browser contiene l'id della sessione php, che dice al server "ehi, conosco questo tipo", il server quindi acquisisce i dati della sessione (da / tmp / per esempio) e ripristina l'utente $ _SESSION
somedev

Sì, lo so, ma sto chiedendo se questo "phpsessid" sta usando per identificare il client prima di creare sessioni e cookie, questo phpsessid è incluso nei dati del cookie e nel computer client e nel file di sessione nella cartella tmp del server ?
Blanktext

Risposte:


173

Analizziamo questo:

I cookie e le sessioni sono entrambi modi per preservare lo stato dell'applicazione tra le diverse richieste effettuate dal browser. È grazie a loro che, ad esempio, non è necessario accedere ogni volta che si richiede una pagina su StackOverflow .

Biscotti

I cookie sono piccoli bit di dati, (lunghezza massima di 4 KB), che contengono dati in una coppia chiave = valore:

name=value; name2=value2

Questi sono impostati da JavaScript o tramite il server utilizzando un'intestazione HTTP .

I cookie hanno un set di data e ora di scadenza, ad esempio utilizzando intestazioni HTTP:

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

Ciò indurrebbe il browser a impostare un cookie denominato name2con un valore di value2, che scadrà tra circa 9 anni.

I cookie sono considerati altamente insicuri perché l'utente può facilmente manipolare il loro contenuto. Ecco perché dovresti sempre convalidare i dati dei cookie . Non dare per scontato che ciò che ottieni da un cookie sia necessariamente ciò che ti aspetti.

I cookie vengono solitamente utilizzati per preservare lo stato di accesso, in cui un nome utente e un hash speciale vengono inviati dal browser e il server li confronta con il database per approvare l'accesso.

I cookie vengono spesso utilizzati anche nella creazione di sessioni .

Sessioni

Le sessioni sono leggermente diverse. Ogni utente riceve un ID di sessione , che viene rimandato al server per la convalida tramite cookie o dalla variabile GET .

Le sessioni sono generalmente di breve durata, il che le rende ideali per salvare lo stato temporaneo tra le applicazioni. Le sessioni scadono anche quando l'utente chiude il browser.

Le sessioni sono considerate più sicure dei cookie perché le variabili stesse sono conservate sul server . Ecco come funziona:

  1. Il server apre una sessione (imposta un cookie tramite intestazione HTTP)
  2. Il server imposta una variabile di sessione.
  3. Pagina delle modifiche del cliente
  4. Il client invia tutti i cookie, insieme all'ID di sessione dal passaggio 1.
  5. Il server legge l'ID di sessione dal cookie.
  6. Il server corrisponde all'ID di sessione da un elenco in un database (o memoria, ecc.).
  7. Il server trova una corrispondenza, legge le variabili che ora sono disponibili su $_SESSIONsuperglobal.

Se PHP non trova una corrispondenza, avvierà una nuova sessione e ripeterà i passaggi da 1 a 7.

Puoi memorizzare informazioni sensibili su una sessione perché sono conservate sul server, ma tieni presente che l'ID della sessione può ancora essere rubato se l'utente, diciamo, ha effettuato l'accesso tramite un WiFi non sicuro. (Un utente malintenzionato può annusare i cookie e impostarli come propri, non vedrà le variabili stesse, ma il server identificherà l'aggressore come utente).


Questo è il succo. Puoi saperne di più sul manuale PHP su entrambi gli argomenti.


1
Quindi questo significa che i cookie devono essere attivati ​​affinché le sessioni funzionino?
bigpotato

1
@ Edmund: Nella maggior parte dei casi, sì. Puoi, tuttavia, impostarlo in modo che gli ID di sessione vengano trasmessi tramite la variabile GET (il che significherebbe che il session_id dovrebbe essere aggiunto a ogni pagina ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Madara's Ghost

Cosa significa esattamente chiudere il browser su dispositivi Android o iPhone? interrompere l'app? spegnere il dispositivo? chiudere tutte le schede ed uscire? ecc
Vandervals

2
@SurajJain Se non fosse per i cookie "ricordati di me", durerebbero più a lungo.
Il fantasma di Madara il

4
altra domanda: QUANDO l'utente chiude il browser, come viene notificato il server da questo evento in modo che il server elimini questo ID di sessione? o scade automaticamente dopo un po 'di tempo?
user2774480
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.