L’ARRAY $_COOKIE

php logoLa conservazione dello stato come già detto può essere fatta sul server con i file di sessione ma anche sul client, in questo caso parliamo di cookie. Se vogliamo delegare al client la conservazione di dati comunque non sensibili, la cosa che dobbiamo fare è inviare queste informazioni al client e lo facciamo attraverso gli headers di risposta. Come sappiamo quando facciamo una richiesta la facciamo tramite un browser all’interno della barra degli indirizzi specificando un URL.

LA FUNZIONE SETCOOKIE()

Attraverso questa richiesta viaggiano altre informazioni tra client e server grazie agli headers, lato server viene analizzata la richiesta e fornita una risposta visibile nel browser dell’utente. Se vogliamo memorizzare informazioni sul client inviamo informazioni attraverso gli headers di risposta, non dobbiamo interagire con gli headers ma utilizzare una funzione setcookie();

set-Cookie

Se ora andiamo nel browser all’indirizzo http://localhost/corsi/php/ArraySuperglobali/setcookie.php apriamo gli strumenti del browser Chrome con F12 -> scheda Network -> aggiorniamo la pagina e facciamo click su setcookie.php vedremo che nel Response Headers abbiamo il seguente cookie.

set-Cookie

Ora creiamo una nuova pagina pagina4.php e facciamo un var_dump dell’array $_COOKIE. Rechiamoci di nuovo nel browser digitando l’indirizzo di pagina4.php e avremo la seguente informazione. (Figura a lato).

S_COOKIE

Per quale motivo abbiamo questa informazione nella pagina4.php? Dagli strumenti del browser facendo click su pagina4.php negli headers della risposta non abbiamo cookie, però se andiamo all’interno degli headers della richiesta abbiamo un header Cookie con questa informazione.

Cookie

In questo caso è il client che ha inviato al server questa informazione, soltanto la prima volta che invochiamo setcookie() inviamo l’informazione dal server al client il client memorizza l’informazione e nelle successive richieste le invia al server. Ritorniamo in setcookie.php, commentiamo setcookie() e facciamo un var_dump($_COOKIE). Anche in questa pagina abbiamo la stessa informazione anche se abbiamo commentato l’istruzione setcookie(). In questo caso è il client che invia l’informazione al server che la legge con l’array superglobale $_COOKIE. Se chiudiamo il Browser e lo riapriamo l’informazione viene persa, l’informazione è stata mantenuta solo per la sessione precedente, se vogliamo conservare l’informazione anche quando l’utente chiude il Browser dobbiamo specificare una scadenza in setcookie().

Expire Cookie

RUOLO DEI COOKIE NELLE SESSIONI

Per quanto riguarda le sessioni ci manca un passaggio nella comprensione del meccanismo. Avviamo una sessione e visualizziamo il suo session_id(). Apriamo in contemporanea due browser per simulare due richieste diverse fatte da due diversi client.

open two browser

Andiamo in visual studio code e apriamo il terminale integrato, andandoci a posizionare nella cartella in cui vengono memorizzate le sessioni che ora ben conosciamo.

sessions

Memorizziamo successivamente un valore nell’array $_SESSION impostando il colore su verde.

vs code

Facciamo la richiesta nel browser Chrome visualizzando correttamente il colore verde. Ora cambiamo il colore, diciamo Blu. Andiamo in Firefox e leggiamo correttamente Blu. Andiamo a leggere i file di sessione e vedremo che la sessione associata a Chrome ha il valore verde, mentre quella associata a Firefox il colore Blu. Il punto è: Come fa il server ad associare una sessione a Chrome e una sessione a Firefox?

IL RUOLO DEI COOKIE

Supponiamo di essere due client diversi, quindi richieste fatte da dispositivi completamente differenti, dato che il protocollo HTTP è stateless ogni volta che facciamo una richiesta con un dispositivo per il server siamo perfetti sconosciuti; quindi, deve esserci un meccanismo tale che quando viene fatta una richiesta con Chrome il server vada a leggere la giusta sessione, item per Firefox. Cancelliamo i due file di sessione e puliamo la cache di Firefox CTRL-SHIFT-CANC. Verifichiamo di nuovo L’ID di sessione, riandiamo in Firefox ma prima di fare la richiesta apriamo gli strumenti per sviluppatori con F12.

Session_ID

Facciamo di nuovo la richiesta e nell’Header di risposta abbiamo un Set-Cookie con valore L’ID di sessione generato.

Firefox

Questo vuol dire che il server invia l’identificativo di sessione al client. Se ora facciamo una nuova richiesta vedremo che nell’Header di risposta non ci sono Cookie (solamente la prima volta il server imposta Set-Cookie) alle successive richieste sarà il client a restituire al server le informazioni nell’ Header di richiesta, per questo motivo siamo in grado di associare qualsiasi client alle sue sessioni.

APPROFONDIMENTO

In PHP, la superglobale $COOKIE è un array associativo che viene utilizzato per accedere ai dati memorizzati nei cookie inviati dal browser del client al server. I cookie sono piccoli file di testo che possono essere utilizzati per memorizzare dati sul computer dell’utente, come le preferenze o le informazioni di sessione, e sono spesso usati per mantenere lo stato tra le diverse pagine di un sito web.

Utilizzo di $COOKIE:

Accesso ai Cookie: Puoi accedere al valore di un cookie specifico utilizzando il nome del cookie come chiave nell’array $COOKIE.

// Supponiamo che esista un cookie chiamato “utente”
if(isset($_COOKIE[‘utente‘])) {
        echoIl valore del cookie ‘utente’ è: “ . $_COOKIE[‘utente‘];
} else {
        echoIl cookie ‘utente’ non è stato impostato.“;
}

Impostazione dei Cookie: Per impostare un cookie, si utilizza la funzione setcookie() di PHP. Ecco un esempio di come impostare un cookie:

// Imposta un cookie chiamato “utente” con il valore “Mario” che scade in 30 giorni
setcookie(“utente“, “Mario“, time() + (86400 * 30), “/”); // 86400 = 1 giorno

Cancellazione di un Cookie: Per cancellare un cookie, devi impostarlo con una data di scadenza nel passato:

// Cancella il cookie chiamato “utente”
setcookie(“utente“, “”, time() – 3600, “/“);

Note importanti:

1. Temporizzazione: I cookie sono inviati dal browser solo durante la richiesta successiva, quindi se imposti un cookie e poi provi immediatamente a leggerlo con $COOKIE, non vedrai ancora il valore aggiornato.

2. Sicurezza: I cookie possono contenere dati sensibili, quindi è importante utilizzarli con attenzione. È consigliato utilizzare l’opzione HttpOnly quando imposti un cookie, in modo che il cookie non sia accessibile tramite JavaScript.

setcookie(“utente“, “Mario“, time() + (86400 * 30), “/“, “”, false, true); // HttpOnly è il settimo parametro

3. Proprietà: I cookie sono specifici per dominio e percorso, il che significa che un cookie impostato per un dominio non sarà disponibile per un altro dominio.

Questa superglobale è particolarmente utile per la gestione delle sessioni utente, il tracciamento delle preferenze e altre funzionalità che richiedono il mantenimento dello stato tra le richieste HTTP.

LINK AI POST PRECEDENTI

IL LINGUAGGIO PHP

LINK AL CODICE SU GITHUB

GITHUB