Attributi dei cookie

Quando un server web risponde a una richiesta di una risorsa, può includere un'intestazione Set-Cookie insieme alla risposta. Questa intestazione indica al browser di memorizzare un cookie. Ad esempio: Set-Cookie:cat=tabby. Che cosa sono i cookie? spiega come funzionano i cookie.

Oltre a fornire un nome e un valore del cookie, Set-Cookie può includere attributi per controllare se i cookie vengono impostati e quando scadono. Gli attributi dei cookie sono separati da punti e virgola. Ad esempio:

    Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;

Questo documento spiega gli attributi dei cookie più importanti:

Utilizzo dei cookie HTTP spiega gli attributi dei cookie in modo più tecnico.

Sicuro

Se un'intestazione Set-Cookie include Secure, il cookie verrà incluso solo nelle richieste criptate che utilizzano il protocollo HTTPS: il cookie non verrà incluso nelle richieste HTTP. Ciò può contribuire a bloccare attacchi intermediari, in cui un malintenzionato interviene segretamente nelle comunicazioni tra il browser e il server per trasmettere informazioni e potenzialmente alterarle.

👉 Per impostazione predefinita, devi includere Secure per tutti i cookie.

HTTPOnly

Se un'intestazione Set-Cookie include HTTPOnly, non è possibile accedere al cookie utilizzando document.cookie. In questo modo, è possibile proteggersi da determinati tipi di attacchi che prendono di mira i cookie.

👉 Per impostazione predefinita, devi includere HTTPOnly per tutti i cookie. Ometti questo valore solo se devi poter impostare e ottenere i valori dei cookie utilizzando JavaScript.

SameSite

Una richiesta di una risorsa da un sito diverso da quello che stai visitando è una richiesta cross-site. Un cookie impostato in risposta a una richiesta cross-site è noto come cookie di terze parti.

L'attributo SameSite controlla se un cookie di terze parti verrà incluso in una richiesta. Ha tre valori possibili: Strict, Lax o None.

👉 SameSite=Lax è il valore predefinito se non è impostato alcun valore. SameSite=None consente i cookie cross-site, ma significa che i cookie verranno bloccati laddove sono in vigore restrizioni per i cookie di terze parti.

Scopri di più: Che cosa sono i cookie di terze parti?

Strict

Il cookie verrà inviato solo in risposta alle richieste di una pagina che si trova sul sito di origine del cookie. Ad esempio, immagina che un utente visiti cats.example e che un cookie sia impostato con l'attributo SameSite=Strict. Successivamente, l'utente si trova su un altro sito e segue un link a una pagina su cats.example. Il cookie impostato non verrà incluso nella richiesta.

Lax

Funziona allo stesso modo di Strict, tranne per il fatto che il browser includerà anche il cookie quando l'utente segue un link al sito di origine del cookie. Nell'esempio precedente Strict, il cookie sarebbe incluso quando l'utente segue il link a cats.example. Lax è l'impostazione predefinita se nell'intestazione Set-Cookie non è incluso alcun attributo SameSite.

Nessuno

Nessun vincolo: il cookie verrà incluso in una richiesta, indipendentemente dal fatto che sia cross-site o meno. Con SameSite=None, il cookie deve avere anche l'attributo Secure.

Partizionata

Questo attributo ti consente di attivare un cookie per l'archiviazione partizionata, con un "contenitore di cookie" separato per ogni sito di primo livello. Il cookie è a doppia chiave, dal sito di primo livello e dal dominio che lo imposta.

Ad esempio, supponiamo che il sito web A e il sito web B includano entrambi un iframe del sito web C. Un cookie partizionato impostato dall'iframe sul sito web A non può essere accessibile dall'iframe sul sito web B: il cookie AC è separato dal cookie BC.

👉 Devi includere l'attributo Partitioned per impostazione predefinita se stai creando un cookie di terze parti, a meno che tu non sappia esplicitamente che deve essere condiviso in più incorporamenti.

Diagramma che mostra che due diversi siti web che incorporano una terza parte comune non condivideranno più i cookie per quella terza parte.
Con il partizionamento dei cookie, un servizio di terze parti che imposta un cookie quando è incorporato in un sito di primo livello non può accedere allo stesso cookie quando il servizio è incorporato in altri siti di primo livello.

I cookie con un attributo Partitioned sono noti come CHIPS: Cookies Having Independent Partitioned State.

I cookie con stato partizionato devono avere l'attributo Secure.

Scopri di più: Cookies Having Independent Partitioned State.

Expires e Max-Age

Puoi specificare una data e un'ora Expires o un Max-Age in secondi dopo i quali un cookie deve essere eliminato e non più inviato. Ad esempio:

  • Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
  • Set-Cookie:cat=tabby; Max-Age=86400

Se non specifichi un attributo Max-Age o Expires, un cookie verrà eliminato al termine della sessione corrente. Questo tipo di cookie è a volte chiamato cookie di sessione.

👉 Ometti gli attributi Max-Age e Expires, a meno che tu non abbia bisogno che un cookie duri più a lungo della sessione corrente. I browser fanno scadere i cookie, quindi non ha senso impostare una scadenza a distanza di anni. Ti consigliamo di aggiornare i cookie quando un utente visita di nuovo il tuo sito.

Dominio

Se un'intestazione Set-Cookie ha un attributo Domain, il cookie verrà incluso nelle richieste al dominio specificato e a uno qualsiasi dei suoi sottodomini.

Se un'intestazione Set-Cookie non ha un attributo Domain, il cookie non verrà incluso nelle richieste ai sottodomini.

In altre parole, l'inclusione dell'attributo Domain riduce le limitazioni del dominio.

Ad esempio, con una risposta dal sito web cats.example:

  • Set-Cookie:cat=tabby
    Il cookie verrà incluso solo nelle richieste a cats.example
  • Set-Cookie:cat=tabby; Domain=cats.example
    Il cookie verrà incluso nelle richieste a cats.example, nonché in qualsiasi richiesta di risorse su sottodomini come fluffy.cats.example o user.assets.cats.example

👉 A meno che non sia necessario includere un cookie nelle richieste ai sottodomini, non includere un attributo Domain.

Percorso

Se un attributo Path è incluso in un'intestazione di risposta Set-Cookie, il cookie impostato verrà incluso solo nelle richieste agli URL (sul sito che ha impostato il cookie) che corrispondono al valore Path.

Ad esempio:

  • Set-Cookie:cat=tabby; Path=/articles
    Il cookie verrà incluso in una richiesta a qualsiasi percorso URL che inizia con /articles:
    https://cats.example/articles/tabby/index.html
    https://cats.example/articles/breeds/tabby/index.html
    https://cats.example/images/tabby.jpg
    https://cats.example/en/articles/tabby/index.html
  • Set-Cookie:cat=tabby; Path=/
    Tutte le richieste a qualsiasi URL del sito includeranno il cookie.

Se un'intestazione della risposta Set-Cookie non ha un valore Path, il cookie verrà incluso solo nelle richieste alla stessa directory. Ad esempio, immagina che un cookie cat=tabby venga impostato in risposta a una richiesta di cats.example/images/tabby.jpg. Se non viene impostato alcun Path, il cookie verrà incluso solo nelle richieste di file all'interno della directory cats.example/images.

👉 Includi Path=/ con un cookie se vuoi che tutte le richieste a qualsiasi percorso del tuo sito includano il cookie. Non fare affidamento su Path per la protezione della sicurezza.

Demo

Strumenti

Scopri di più