W3docs

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.

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.

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:

  1. Il server invia un cookie. Quando si chiama setcookie(), PHP aggiunge un header di risposta HTTP Set-Cookie. Il browser memorizza il cookie.
  2. Il browser lo rimanda. Ad ogni richiesta successiva allo stesso dominio, il browser allega automaticamente il cookie nell'header di richiesta Cookie.
  3. PHP lo legge. PHP analizza i cookie in entrata nell'array $_COOKIE, quindi è possibile leggerli al successivo caricamento della pagina.
CookieSessioni
Dove risiedono i datiClient (browser)Server
Sopravvive al riavvio del browserSì (se expire è nel futuro)Solo con un cookie di sessione persistente
Limite di dimensione~4 KB per cookieLimitato dalla memoria del server
Adatto perPreferenze, "ricordami", flag non sensibiliStato 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.

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 cookie
  • value è il valore da memorizzare nel cookie
  • expire è il momento dopo il quale il cookie scadrà
  • path è il percorso sul server in cui il cookie sarà disponibile
  • domain è il nome di dominio del sito web
  • secure indica se il cookie deve essere inviato solo tramite una connessione sicura (HTTPS)
  • httponly indica 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.

Attenzione

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"
]);

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.

Informazione

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.

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.

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.

Attenzione

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.

I cookie PHP hanno diversi vantaggi, tra cui:

  1. 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.
  2. 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.
  3. 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.

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Pratica

Pratica
Cosa è vero riguardo ai cookie PHP secondo le informazioni presenti nella pagina?
Cosa è vero riguardo ai cookie PHP secondo le informazioni presenti nella pagina?
Was this page helpful?