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. L'articolo Che cosa sono i cookie? spiega come funzionano i cookie.

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

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

Questo articolo illustra gli attributi dei cookie più importanti:

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

Sicuro

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

Se un'intestazione Set-Cookie include Secure, il cookie verrà incluso solo con le richieste criptate che utilizzano il protocollo HTTPS: non verrà incluso nelle richieste HTTP. In questo modo è possibile bloccare gli attacchi intermedi, in cui un malintenzionato interviene segretamente nelle comunicazioni tra il browser e il server per trasmettere informazioni e potenzialmente modificarle.

HTTPOnly

👉 Per impostazione predefinita, devi includere HTTPOnly per tutti i cookie. Ometti solo se hai bisogno di accedere a JavaScript.

Se un'intestazione Set-Cookie include HTTPOnly, non è possibile accedere al cookie utilizzando document.cookie. In questo modo puoi proteggerti da determinati tipi di attacchi che hanno come target i cookie.

SameSite

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

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 tra siti è noto come cookie di terze parti. Scopri di più: Che cosa sono i cookie di terze parti?

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

Strict

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

Lax

Funziona come 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 di Strict, il cookie verrebbe incluso quando l'utente segue il link a cats.example. Lax è il valore predefinito se nessun attributo SameSite è incluso in un'intestazione Set-Cookie.

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.

Scopri di più: Spiegazione dei cookie SameSite.

Partizionata

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

Questo attributo ti consente di attivare un cookie per lo spazio di archiviazione partizionato, con un "contenitore dei cookie" distinto per ogni sito di primo livello. Il cookie è a doppia chiave, dal sito di primo livello e dal dominio che lo imposta.

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

Diagramma che mostra che due siti web diversi che incorporano una terza parte comune
  non condivideranno più i cookie per questa terza parte.
Con la suddivisione 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ù: Cookie Having Independent Partitioned State.

Expires e Max-Age

👉 Non includere gli attributi Max-Age e Expires, a meno che non ti serva un cookie che rimanga attivo più a lungo della sessione corrente. I browser scagliano i cookie, quindi non ha senso impostare una scadenza a distanza di anni. Ti consigliamo invece di aggiornare i cookie quando un utente visita di nuovo il tuo sito.

Puoi specificare una data e un'ora Expires o un Max-Age in secondi dopo la quale un cookie deve essere eliminato e non essere 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.

Dominio

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

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

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 del 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

Percorso

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

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) corrispondenti al valore Path.

Ad esempio:

  • Set-Cookie:cat=tabby; Path=/articles
    Il cookie verrà incluso per una richiesta a qualsiasi percorso dell'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 di 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.

Demo

Strumenti

Scopri di più