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.

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 acats.example
Set-Cookie:cat=tabby; Domain=cats.example
Il cookie verrà incluso nelle richieste acats.example
, nonché in qualsiasi richiesta di risorse su sottodomini comefluffy.cats.example
ouser.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
- 1pc.glitch.me: demo del cookie proprietario
- 3pc.glitch.me: demo dei cookie di terze parti
Strumenti
- Visualizzare, aggiungere, modificare ed eliminare i cookie in Chrome DevTools
- Privacy Sandbox Analysis Tool
Scopri di più
- Ricette per cookie originali
- Che cosa sono i cookie?
- Che cosa sono i cookie di terze parti?
- Richiesta e risposta HTTP
- Strumenti per i cookie
- Demo dei cookie
- Utilizzo dei cookie HTTP
- Spiegazione dei cookie SameSite
- OWASP: Cookies