Cookie PHP
I cookie PHP sono piccoli file di testo lato client che memorizzano dati sul comportamento e le preferenze degli utenti. Ampiamente usati per sessioni e preferenze.
Introduzione ai cookie PHP
I cookie PHP sono piccoli file di testo memorizzati sul lato client che contengono dati sul comportamento e le preferenze dell'utente. Sono ampiamente utilizzati per memorizzare informazioni come le preferenze dell'utente, il contenuto del carrello della spesa o gli identificatori di sessione.
In questo articolo, approfondiremo le basi dei cookie PHP e come possono essere implementati in un sito web.
Cosa sono i cookie PHP?
Un cookie è un piccolo frammento di dati memorizzato da un sito web sul dispositivo dell'utente. A differenza delle sessioni lato server, i cookie risiedono interamente sul client, rendendoli ideali per dati leggeri e persistenti come preferenze o token di tracciamento. PHP crea i cookie utilizzando la funzione setcookie() e vi accede tramite l'array superglobale $_COOKIE. La funzione setcookie() accetta diversi argomenti, tra cui il nome del cookie, il valore, il tempo di scadenza, il percorso, il dominio e i flag di sicurezza.
Come funziona in pratica:
- Il server invia un cookie. Quando si chiama
setcookie(), PHP aggiunge un header di risposta HTTPSet-Cookie. Il browser memorizza il cookie. - Il browser lo rimanda. Ad ogni richiesta successiva allo stesso dominio, il browser allega automaticamente il cookie nell'header di richiesta
Cookie. - PHP lo legge. PHP analizza i cookie in entrata nell'array
$_COOKIE, quindi è possibile leggerli al successivo caricamento della pagina.
Cookie vs. Sessioni
| Cookie | Sessioni | |
|---|---|---|
| Dove risiedono i dati | Client (browser) | Server |
| Sopravvive al riavvio del browser | Sì (se expire è nel futuro) | Solo con un cookie di sessione persistente |
| Limite di dimensione | ~4 KB per cookie | Limitato dalla memoria del server |
| Adatto per | Preferenze, "ricordami", flag non sensibili | Stato di login, dati sensibili |
Usa i cookie per dati piccoli e non sensibili che devono persistere sul client. Usa le sessioni quando i dati sono sensibili o di grandi dimensioni.
Creazione di cookie PHP
Per creare un cookie PHP, utilizza la funzione setcookie(). La sintassi di base della funzione setcookie() è la seguente:
Sintassi della funzione PHP setcookie
setcookie(name, value, expire, path, domain, secure, httponly);Dove:
nameè il nome del cookievalueè il valore da memorizzare nel cookieexpireè il momento dopo il quale il cookie scadràpathè il percorso sul server in cui il cookie sarà disponibiledomainè il nome di dominio del sito websecureindica se il cookie deve essere inviato solo tramite una connessione sicura (HTTPS)httponlyindica se il cookie deve essere nascosto a JavaScript (document.cookie), il che aiuta a proteggersi dagli attacchi XSS
Ecco un esempio di come creare un cookie PHP:
Esempio PHP semplice per aggiungere un cookie
setcookie("user", "John Doe", time() + 3600, "/");Questo codice crea un cookie chiamato user con un valore John Doe che scade tra un'ora (time() restituisce il timestamp Unix corrente in secondi, quindi aggiungere 3600 imposta la scadenza un'ora avanti). Il percorso "/" rende il cookie disponibile in tutto il sito web.
setcookie() invia un header HTTP, quindi deve essere chiamata prima di qualsiasi output — nessun HTML, spazio bianco o echo prima di essa. Se l'output è già iniziato, si riceverà un avviso "headers already sent" e il cookie non verrà impostato. Vedi headers_sent() per come rilevare questo problema.
La sintassi moderna con array (PHP 7.3+)
Da PHP 7.3 è possibile passare un array di opzioni al posto degli argomenti posizionali. Questa è la forma consigliata perché consente di impostare samesite, che controlla se il cookie viene inviato nelle richieste cross-site (una difesa chiave contro il CSRF):
setcookie("user", "John Doe", [
"expires" => time() + 3600,
"path" => "/",
"secure" => true, // only over HTTPS
"httponly" => true, // not readable by JavaScript
"samesite" => "Lax", // "Strict", "Lax", or "None"
]);Recupero dei cookie PHP
Una volta creato un cookie, il suo valore può essere recuperato utilizzando l'array superglobale $_COOKIE. La sintassi di base per accedere al valore di un cookie è la seguente:
PHP come ottenere il valore di un cookie
$_COOKIE['name'];Dove name è il nome del cookie.
Ecco un esempio di come recuperare il valore di un cookie:
PHP come accedere al valore di un cookie
if (isset($_COOKIE["user"])) {
echo "Welcome back, " . $_COOKIE["user"];
} else {
echo "Welcome, guest!";
}Verificare sempre con isset() prima di leggere un cookie. Un cookie impostato nella richiesta corrente non è disponibile in $_COOKIE fino al successivo caricamento della pagina, perché il browser lo invia solo nella richiesta seguente. Leggere un cookie appena impostato nello stesso script non restituisce nulla.
I valori dei cookie arrivano come input utente non attendibile — chiunque può modificarli nel proprio browser. Validali e sanificali prima dell'uso, ad esempio con filter_var(). Non fidarsi mai del valore di un cookie per decisioni di autorizzazione da solo.
Aggiornamento dei cookie PHP
Per aggiornare un cookie PHP, basta creare un nuovo cookie con lo stesso nome e un nuovo valore. Anche il tempo di scadenza dovrebbe essere aggiornato per garantire che il cookie continui a persistere.
Ecco un esempio di come aggiornare un cookie PHP:
Esempio di come aggiornare un cookie
setcookie("user", "Jane Doe", time()+3600, "/", "", 0, 0);Questo codice aggiorna il cookie user con un nuovo valore Jane Doe e prolunga il suo tempo di scadenza di un'altra ora.
Eliminazione dei cookie PHP
Per eliminare un cookie PHP, basta creare un nuovo cookie con lo stesso nome e un tempo di scadenza nel passato. Questo causerà l'eliminazione automatica del cookie dal dispositivo dell'utente.
Ecco un esempio di come eliminare un cookie PHP:
Esempio di come eliminare un cookie
setcookie("user", "", time()-3600, "/", "", 0, 0);Questo codice crea un nuovo cookie user con un tempo di scadenza che è un'ora nel passato. Questo causerà l'eliminazione automatica del cookie dal dispositivo dell'utente.
Per eliminare un cookie è necessario passare lo stesso path (e domain) usato durante la creazione. Un cookie impostato con il percorso /account è un cookie diverso da uno impostato con il percorso /, e cancellare il percorso sbagliato lascia l'originale al suo posto.
Un esempio completo: ricordare una preferenza di tema
Mettendo tutto insieme, ecco un piccolo script che permette a un visitatore di scegliere un tema di colore e lo ricorda nelle visite successive usando un cookie:
<?php
// 1. Save the choice when the form is submitted
if (isset($_POST["theme"])) {
setcookie("theme", $_POST["theme"], time() + 60 * 60 * 24 * 30, "/"); // 30 days
// Reload so the new cookie is available to $_COOKIE
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
}
// 2. Read the saved choice (default to "light")
$theme = isset($_COOKIE["theme"]) ? $_COOKIE["theme"] : "light";
?>
<p>Current theme: <?= htmlspecialchars($theme) ?></p>
<form method="post">
<button name="theme" value="light">Light</button>
<button name="theme" value="dark">Dark</button>
</form>Si noti come lo script esegue un reindirizzamento dopo il salvataggio in modo che il cookie appena impostato venga letto nella richiesta successiva, e come htmlspecialchars() esegue l'escape del valore prima di stamparlo. Vedere gestione dei form PHP per ulteriori informazioni sull'elaborazione sicura dei dati $_POST.
Vantaggi dell'utilizzo dei cookie PHP
I cookie PHP hanno diversi vantaggi, tra cui:
- Esperienza utente migliorata: i cookie consentono ai siti web di memorizzare informazioni specifiche dell'utente, come preferenze e credenziali di accesso, che possono essere utilizzate per fornire un'esperienza utente più personalizzata.
- Dati persistenti: i cookie consentono ai siti web di memorizzare dati sul dispositivo dell'utente, che possono persistere anche dopo che l'utente chiude il browser o spegne il dispositivo. Ciò rende possibile per i siti web ricordare le preferenze e le credenziali di accesso di un utente in più visite.
- Facilità di implementazione: i cookie PHP sono facili da implementare e possono essere utilizzati per memorizzare un'ampia varietà di dati, rendendoli uno strumento versatile per gli sviluppatori web.
Best practice per l'utilizzo dei cookie PHP
Per garantire la migliore esperienza utente e sicurezza possibile, è importante seguire le best practice quando si utilizzano i cookie PHP. Alcune di queste best practice includono:
- Usare connessioni sicure: quando possibile, utilizzare connessioni sicure (HTTPS) durante la creazione e l'accesso ai cookie. Ciò aiuterà a proteggere i dati memorizzati nei cookie dall'intercettazione da parte di terzi.
- Memorizzare i dati sensibili in modo sicuro: non memorizzare dati sensibili, come credenziali di accesso o password, nei cookie. Poiché i cookie sono memorizzati lato client, sono vulnerabili a furti o manomissioni. Utilizzare le sessioni lato server (
$_SESSION) per i dati di autenticazione sensibili. - Usare nomi di cookie univoci: utilizzare nomi univoci e descrittivi per i propri cookie per prevenire conflitti con altri cookie utilizzati dal sito web o da altri siti.
- Limitare la quantità di dati memorizzati: limitare la quantità di dati memorizzati nei cookie solo a ciò che è necessario. Grandi quantità di dati possono rallentare le prestazioni del sito web e aumentare il rischio di violazioni dei dati.
Conclusione
I cookie PHP sono uno strumento potente per gli sviluppatori web, che consente loro di memorizzare e recuperare dati sul dispositivo dell'utente. Seguendo le best practice e tenendo in considerazione la sicurezza, i cookie PHP possono essere utilizzati per fornire una migliore esperienza utente e aumentare la funzionalità del sito web.