Glossario

Come un solo attributo mancante decide tra cookie di sessione e cookie persistente

Taras Shynkarenko
Taras Shynkarenko
•Aggiornato: •9 min di lettura
Come un solo attributo mancante decide tra cookie di sessione e cookie persistenteCome un solo attributo mancante decide tra cookie di sessione e cookie persistente

In breve, la risposta rapida

9 min di lettura

Un cookie persistente porta con sé un attributo Expires o Max-Age e resta finché quel termine non scade. Un cookie di sessione non ha né l'uno né l'altro e, secondo l'RFC 6265, vive fino a quando "la sessione corrente è terminata", come la intende il browser. La specifica non definisce mai cosa sia la sessione, e MDN avverte che i browser con ripristino della sessione possono tenere i cookie di sessione "a tempo indeterminato". Ora anche i cookie persistenti hanno un tetto. La bozza rfc6265bis limita la durata a 400 giorni, limite che Chrome applica dalla versione 104 di agosto 2022, mentre Safari limita a 7 giorni i cookie persistenti scritti tramite document.cookie. Per il consenso in UE, il Gruppo di lavoro Articolo 29 ha detto che i cookie di sessione di prima parte hanno una probabilità "molto più alta" di essere esenti rispetto a quelli persistenti di terze parti, ma ha ribadito che a decidere è la finalità, non la durata.

Tutta la differenza tra cookie di sessione e cookie persistente sta in un attributo: un cookie persistente ha una data Expires o un Max-Age in secondi, un cookie di sessione non ha né l'uno né l'altro. La RFC 6265, lo standard attuale sui cookie, dice che un cookie senza nessuno dei due attributi viene conservato finché "the current session is over" (come definito dallo user agent). Un cookie con uno dei due attributi viene conservato fino allo scadere di quel termine, a meno che il browser o l'utente lo cancellino prima.

Set-Cookie: sid=31d4d96e407aad42; Path=/; Secure; HttpOnly
Set-Cookie: lang=en-US; Max-Age=2592000; Path=/

La prima riga imposta un cookie di sessione. La seconda imposta un cookie persistente che dura 2.592.000 secondi, cioè 30 giorni. Il nome del cookie non c'entra. Un cookie chiamato session_id con un Max-Age è persistente, mentre un cookie chiamato remember_me senza scadenza è un cookie di sessione.

Cookie di sessioneCookie persistente
Attributo che decideNé Expires né Max-AgeExpires o Max-Age presente
Flag interno della RFC 6265persistent-flag falsopersistent-flag vero
Quando viene eliminato"the current session is over", come lo definisce il browserAllo scadere del termine
Sopravvive al riavvio del browserNon secondo la specifica, ma il ripristino della sessione può mantenerloSì
Durata massimaIllimitata finché la sessione viene ripristinata400 giorni secondo rfc6265bis e in Chrome
Safari ITP quando è impostato da document.cookieNon toccato, resta un cookie di sessioneLimitato a 7 giorni
In navigazione privataEliminato con la sessione privataTrattato come cookie di sessione

Il browser lo decide leggendo gli attributi in ordine, secondo l'algoritmo di memorizzazione della sezione 5.3 della RFC 6265. Se il cookie ha un Max-Age, il browser imposta il persistent-flag del cookie su vero e usa Max-Age per la scadenza. Altrimenti, se ha un Expires, il flag è vero e la scadenza viene da Expires. In tutti gli altri casi il flag è falso e la scadenza viene impostata su "the latest representable date".

Quindi, secondo la specifica, un cookie di sessione ha la data di scadenza più lontana possibile, e a farlo rimuovere è solo il persistent-flag falso. La stessa sezione dice: "When 'the current session is over' (as defined by the user agent), the user agent MUST remove from the cookie store all cookies with the persistent-flag set to false."

Altre due regole contano nella pratica:

  • Max-Age vince su Expires. Sezione 4.1.2.2: "If a cookie has both the Max-Age and the Expires attribute, the Max-Age attribute has precedence and controls the expiration date of the cookie."
  • Zero cancella. Secondo la sezione 5.2.2, un Max-Age pari o inferiore a 0 imposta la scadenza su "the earliest representable date and time", quindi il cookie viene rimosso subito. Inviare Max-Age=0 è il modo standard per cancellare un cookie dal server.

Le due pagine di MDN sui cookie non concordano su quale orologio usi la data di Expires. La guida ai cookie HTTP dice che le date Expires sono "relative to the client the cookie is being set on", quindi un server con un orario diverso può causare errori. Il riferimento a Set-Cookie dice invece che il server imposta Expires "with a value relative to its own internal clock", e che Firefox e i browser basati su Chromium correggono la differenza di orologio usando l'header Date, mentre la specifica "does not indicate if/how the value should be corrected by the recipient." Il consiglio della guida vale comunque: Max-Age è "less error-prone", perché conta i secondi dal momento in cui il browser riceve il cookie.

Quando finisce davvero una sessione?

Nessuno standard dice quando finisce una sessione, ed è per questo che i cookie di sessione non si comportano come suggerisce il loro nome. La RFC 6265 lo lascia al browser con la formula "as defined by the user agent", che compare sia nella sezione sugli attributi sia in quella sulla memorizzazione.

Le due pagine di MDN descrivono il risultato da lati opposti. Il riferimento a Set-Cookie dice che una sessione "finishes when the client shuts down, after which the session cookie is removed", poi avverte che i browser con una funzione di ripristino della sessione ripristinano anche i cookie di sessione, "as if the browser was never closed." La guida ai cookie HTTP va oltre: "The browser defines when the 'current session' ends, and some browsers use session restoring when restarting. This can cause session cookies to last indefinitely."

Con il ripristino della sessione attivo, un cookie di sessione può sopravvivere a un cookie persistente con scadenza a una settimana. Il codice che considera il cookie di sessione una garanzia di logout dipende da un'impostazione del browser che non può vedere, quindi fai scadere l'autenticazione anche lato server.

Un cookie di sessione non ha nemmeno nulla a che fare con una sessione in ambito analytics. Google Analytics 4 salva lo stato della sessione in un cookie chiamato _ga_<container-id>, che il suo centro assistenza elenca con una scadenza predefinita di 2 anni e la descrizione "Used to persist session state." La sessione analytics è una finestra di tempo calcolata dallo strumento, spiegata in cosa conta come sessione. Il cookie che la ricorda è persistente.

Una persona che chiude un laptop su una scrivania, il momento in cui finisce una sessione del browser e si decide la sorte dei suoi cookie di sessione.

Un cookie persistente può durare fino a 400 giorni in Chrome e nella bozza che sostituirà la RFC 6265. La RFC 6265 non fissava alcun limite massimo. Il suo successore, draft-ietf-httpbis-rfc6265bis-22 del 1 dicembre 2025, che il datatracker dell'IETF mostra nella coda del RFC Editor, aggiunge la sezione 5.5: il browser "MUST limit the maximum age of the cookie" (deve limitare la durata massima del cookie), e "The limit SHOULD NOT be greater than 400 days (34560000 seconds) in the future" (il limite non dovrebbe superare i 400 giorni, cioè 34560000 secondi, nel futuro). Un valore di Expires o Max-Age oltre il limite "MUST be reduced to the limit" (deve essere ridotto al limite).

Chrome applica già questo tetto. Il blog Chrome for Developers lo dichiara così: "As of Chrome release M104 (August 2022) cookies can no longer set an expiration date more than 400 days in the future" (a partire da Chrome M104, agosto 2022, i cookie non possono più impostare una data di scadenza oltre i 400 giorni nel futuro). Questo mette in conflitto due numeri pubblicati. Google Analytics documenta valori predefiniti di 2 anni per _ga e _ga_<container-id>, e Chrome, anch'esso di Google, riduce a 400 giorni qualsiasi data simile nel momento in cui il cookie viene salvato.

Safari fissa un limite molto più basso per un tipo di cookie. L'annuncio di Intelligent Tracking Prevention 2.1 di WebKit, del 21 febbraio 2019, dice: "All persistent client-side cookies, i.e. persistent cookies created through document.cookie, are capped to a seven day expiry" (tutti i cookie persistenti lato client, cioè quelli creati tramite document.cookie, sono limitati a una scadenza di sette giorni). Lo stesso articolo aggiunge: "Session cookies are not affected, they remain session cookies" (i cookie di sessione non sono interessati e restano cookie di sessione). I cookie impostati dall'header Set-Cookie di un server restano fuori da questa regola. Tutte le regole di Safari le trovi in come funziona il limite di 7 giorni dei cookie in Safari.

La RFC 6265 chiede inoltre ai server di darsi un limite. La sezione 7.3 dice che i server "SHOULD promote user privacy by selecting reasonable cookie expiration periods based on the purpose of the cookie" (dovrebbero tutelare la privacy dell'utente scegliendo periodi di scadenza ragionevoli in base allo scopo del cookie), e porta un esempio che confonde il vocabolario: "a typical session identifier might reasonably be set to expire in two weeks" (un tipico identificatore di sessione può ragionevolmente essere impostato per scadere dopo due settimane). Un identificatore di sessione, insomma, spesso vive in un cookie persistente.

Flowsery
Flowsery

Inizia la prova gratuita di 14 giorni

Dashboard in tempo reale

Monitoraggio degli obiettivi

Tracciamento senza cookie

Un calendario da parete con dei giorni barrati, a rappresentare le date di scadenza fisse e i limiti di 400 giorni che valgono per i cookie persistenti.

Durata massima di un cookie persistente
Safari, impostato da document.cookie 7 giorni
Limite di Chrome e di rfc6265bis 400 giorni
Valore predefinito di _ga in Google Analytics 2 anni
Chrome riduce a 400 giorni il valore predefinito di due anni di Google Analytics, mentre Safari porta a 7 giorni i cookie persistenti impostati da document.cookie.

Secondo il diritto dell'UE, nessuno dei due tipi è esente dal consenso per via della sua durata, ed entrambi sono esenti solo quando sono strettamente necessari per un servizio richiesto dall'utente. Il Parere 04/2012 del Gruppo di lavoro Articolo 29 sull'esenzione dal consenso per i cookie, adottato il 7 giugno 2012, definisce i due termini: un cookie di sessione "is automatically deleted when the user closes his browser" (viene cancellato automaticamente quando l'utente chiude il browser), e un cookie persistente "remains stored in the user's terminal device until it reaches a defined expiration date (which can be minutes, days or several years in the future)" (resta memorizzato nel dispositivo terminale dell'utente fino a una data di scadenza definita, che può essere tra minuti, giorni o diversi anni).

Il parere tratta poi la durata come un indizio, non come un criterio di verifica. Afferma che "'first party' session cookies are far more likely to be exempted from consent than 'third party' persistent cookies" (è molto più probabile che i cookie di sessione "di prima parte" siano esentati dal consenso rispetto ai cookie persistenti "di terze parti"), e nello stesso paragrafo che "The risk to data protection comes from the purpose(s) of processing rather than the information contained within the cookie" (il rischio per la protezione dei dati deriva dalle finalità del trattamento, più che dalle informazioni contenute nel cookie). L'esempio più chiaro è il login. I cookie di autenticazione che durano quanto la sessione sono esenti, ma "Persistent login cookies which store an authentication token across browser sessions are not exempted" (i cookie di login persistenti, che conservano un token di autenticazione tra una sessione e l'altra del browser, non sono esenti), e una casella "remember me (uses cookies)" (ricordami, usa i cookie) è indicata come un modo adeguato per ottenere il consenso.

Le autorità nazionali aggiungono dei numeri. La CNIL francese, nelle sue linee guida sugli strumenti di misurazione dell'audience, permette a questi tracker di saltare il consenso solo se la loro durata è limitata a un periodo "comme c'est le cas d'une durée de treize mois" (13 mesi, per esempio), non è "prorogée automatiquement lors des nouvelles visites" (prorogata automaticamente a ogni nuova visita), e i dati raccolti vengono conservati al massimo "vingt-cinq mois" (25 mesi). Un cookie di analytics che azzera la scadenza a ogni visita non rispetta la seconda condizione, per quanto breve sia la sua durata.

Per la tabella dei cookie in una informativa sulla privacy, indica la durata di ogni cookie così com'è davvero impostata, "sessione" oppure una durata, accanto alla sua finalità e al fatto che sia di prima o di terza parte. Le stesse domande valgono per i dati conservati nello storage del browser, di cui si occupa la pagina su local storage e cookie a confronto.

Domande frequenti

Ometti sia l'attributo Expires sia Max-Age quando lo imposti. Il browser tiene allora il cookie fino alla fine della sessione, secondo la definizione che ne dà il browser. La pagina MDN su document.cookie riporta la stessa regola per i cookie impostati da script: se nessuno dei due è specificato, il cookie scade alla fine della sessione.

No. Chiudere una scheda non termina la sessione del browser. I cookie di sessione vengono rimossi quando il browser si chiude, a meno che il ripristino della sessione non li riporti indietro.

Prevale Max-Age. La RFC 6265, sezione 4.1.2.2, dice che Max-Age "has precedence and controls the expiration date of the cookie" (ha la precedenza e controlla la data di scadenza del cookie). MDN aggiunge che Max-Age è meno soggetto a errori, perché una data Expires dipende da orologi che possono non essere allineati.

Imposta di nuovo lo stesso cookie, con lo stesso nome, dominio e percorso, e con un Max-Age pari a 0 oppure una data Expires nel passato. La RFC 6265 tratta un Max-Age pari o inferiore a zero come la prima data rappresentabile, quindi il browser rimuove subito il cookie.

I cookie di sessione hanno una vita più breve per progetto, e questo limita per quanto tempo possono collegare tra loro le visite. Il Gruppo di lavoro Articolo 29 ha comunque giudicato i cookie in base alla finalità: un cookie di sessione usato per il tracciamento richiede il consenso, mentre un cookie persistente può essere esente quando l'utente ha chiesto ciò che fa.

In pratica sì. La RFC 6265, sezione 7.2, dice che un browser che offre di impedire l'archiviazione persistente "MUST treat all received cookies as if the persistent-flag were set to false" (deve trattare tutti i cookie ricevuti come se il flag persistente fosse impostato su falso), e cita la navigazione privata come forma comune di questa impostazione. Ogni cookie sparisce quando la sessione privata si chiude.

No. La sessione di analytics è una finestra temporale calcolata dallo strumento, e il cookie che la ricorda è persistente. Google Analytics 4 salva lo stato della sessione in _ga_<container-id>, che il suo centro assistenza elenca con una scadenza predefinita di 2 anni.

Fino a 400 giorni. Da Chrome M104, nell'agosto 2022, i cookie non possono più impostare una data di scadenza oltre i 400 giorni nel futuro, quindi un valore di Expires o Max-Age più lungo viene tagliato a quel limite. La bozza rfc6265bis fissa lo stesso tetto.

Non secondo la specifica, ma spesso nella pratica sì. La RFC 6265 lascia al browser decidere quando finisce la sessione, e i browser con ripristino della sessione riportano indietro i cookie di sessione come se il browser non fosse mai stato chiuso. MDN avverte che così possono durare indefinitamente.

Sì. Il Parere 04/2012 del Gruppo di lavoro Articolo 29 dice che i cookie di login persistenti, che conservano un token di autenticazione tra una sessione e l'altra del browser, non sono esenti, e indica una casella "remember me (uses cookies)" come un modo per ottenere il consenso. I cookie di autenticazione che durano solo quanto la sessione sono esenti.

Flowsery
Flowsery

Inizia la prova gratuita di 14 giorni

Dashboard in tempo reale

Monitoraggio degli obiettivi

Tracciamento senza cookie

Questo articolo ti è stato utile?

Facci sapere cosa ne pensi!

Vedici più spesso su Google

Con un clic imposti Flowsery come fonte preferita e i nostri articoli salgono in Notizie principali, Modalità AI e AI Overview.

Prima di andare...

Flowsery

Flowsery

Analytics per il tuo sito che parte dalle entrate

Monitora ogni visitatore, sorgente e conversione in tempo reale. Semplice, potente e senza cookie.

Dashboard in tempo reale

Monitoraggio degli obiettivi

Tracciamento senza cookie

Termini del glossario correlati

Dimensione, scadenza, accesso e legge: local storage e cookie a confrontoDimensione, scadenza, accesso e legge: local storage e cookie a confronto
Glossario

Dimensione, scadenza, accesso e legge: local storage e cookie a confronto

Local storage e cookie a confronto, dalle specifiche: limiti di dimensione, scadenza, cosa viaggia a ogni richiesta, HttpOnly, Secure, SameSite, ITP di Safari ed ePrivacy.

•9 min di lettura
Come funziona il test dell'interesse legittimo nel GDPR ai sensi dell'articolo 6(1)(f)Come funziona il test dell'interesse legittimo nel GDPR ai sensi dell'articolo 6(1)(f)
Glossario

Come funziona il test dell'interesse legittimo nel GDPR ai sensi dell'articolo 6(1)(f)

Le regole sull'interesse legittimo nel GDPR all'articolo 6(1)(f), citate da EUR-Lex, con il test in tre parti dell'EDPB e il perché l'analisi web resta un caso controverso.

•10 min di lettura
Da dove arriva il limite di dimensione dei cookie di 4096 byteDa dove arriva il limite di dimensione dei cookie di 4096 byte
Glossario

Da dove arriva il limite di dimensione dei cookie di 4096 byte

Il limite di dimensione dei cookie è 4096 byte tra nome e valore in Chrome e Firefox, 1024 byte per attributo e 180 cookie per dominio. Con le righe del codice sorgente.

•9 min di lettura
Cosa richiede davvero il GDPR per il session replayCosa richiede davvero il GDPR per il session replay
Glossario

Cosa richiede davvero il GDPR per il session replay

Valutare il session replay secondo il GDPR dipende da quattro elementi: una base giuridica ex articolo 6, i dati particolari dell'articolo 9, il consenso dell'articolo 5(3) ePrivacy e una DPIA.

•9 min di lettura
Cosa si rompe davvero con SameSite Lax, Strict e NoneCosa si rompe davvero con SameSite Lax, Strict e None
Glossario

Cosa si rompe davvero con SameSite Lax, Strict e None

SameSite Lax, Strict o None, deciso dal testo dell'RFC e dal default documentato da Chrome, con il requisito Secure e ciò che ogni modalità fa smettere di funzionare.

•9 min di lettura
Cosa limita davvero il limite di 7 giorni dei cookie di SafariCosa limita davvero il limite di 7 giorni dei cookie di Safari
Glossario

Cosa limita davvero il limite di 7 giorni dei cookie di Safari

Il limite di 7 giorni dei cookie di Safari riduce i cookie di prima parte impostati da script, e dopo certi clic cross-site scatta un limite di 24 ore.

•7 min di lettura

Articoli correlati