Introduzione

I cookie del browser sono stati introdotti nel web per mantenere informazioni persistenti sull'utente. Il primo caso d'uso è stato quello di verificare se un utente aveva già visitato il sito Web di Netscape.

I cookie sono stringhe che hanno un campo nome, un campo valore e attributi opzionali aggiuntivi. I valori sono stringhe e puoi memorizzare tutto ciò che ritieni sia meglio per la tua applicazione. Google Analytics _ga è probabilmente il one of || the cookie più comune in circolazione, di solito ha questo aspetto:

  • Name: _ga
  • Value: GA1.3.210706468.1583989741
  • Domain: .example.com
  • Path: /
  • Expires / Max-Age: 2022-03-12T05:12:53.000Z

I cookie possono memorizzare fino a 4096 byte di dati (questo include nome, valore, dominio, data di scadenza e qualsiasi altra cosa tu possa inserire lì). Puoi aggiungere un numero limitato di cookie per dominio che cambia a seconda del browser.

Esistono due modi principali per creare i cookie:

  • Con HTTP puoi inviare Set-Cookie con la tua intestazione di risposta HTTP. A seconda delle tecnologie che stai utilizzando per il tuo server web; puoi utilizzare diversi strumenti e librerie per gestire le intestazioni dei cookie. Questi strumenti dovrebbero creare risposte HTTP che saranno più o meno simili a questa:
HTTP/2.0 200 OK
Content-type: text/html
Set-Cookie: alligator_name=barry
Set-Cookie: tasty_cookie=strawberry
... More http Content

Puoi aggiungere informazioni ai tuoi cookie come una data di scadenza expiration date e funzioni di sicurezza come la direttiva Secure e il flag HttpOnly.

Set-Cookie: cookie_name=cookie_value; Expires=Wed, 17 Sep 2021 07:00:00 GMT; Secure; HttpOnly

Il flag HttpOnly significa che i cookie non possono essere letti o modificati dal browser. E Secure significa che il cookie può essere trasferito solo su HTTPS. Questi sono molto importanti per proteggere la tua applicazione.

  • Con Javascriptè è più complicato gestire i cookie. Abbiamo un'interfaccia document.cookie che memorizza i nostri cookie e può essere riassegnata. Ad esempio su un sito in cui è installato Google Analytics, nella console per sviluppatori, possiamo fare:
console.log(document.cookie)
// logs something like "_ga=GA1.3.210706468.1583989741; _gid=GA1.3.1734708005.1583989741"

// This equal sign does not work as you expect
document.cookie = "alligator=alligator_cookie_content;"
console.log(document.cookie)
// logs "_ga=GA1.3.210706468.1583989741; _gid=GA1.3.1734708005.1583989741; alligator=alligator_cookie_content"
// Notice that the previous piece of code appends the new cookie we created

// A rough implementation of a cookie interface could look like this:
const createCookie = (name, value) => document.cookie = name + '=' + value + ';'
// For a real update we would first check if the cookie exists
const updateCookie = (name, value) => document.cookie = name + '=' + value + ';'
const deleteCookie = (name) => document.cookie = name + '=; Max-Age=-1;';

I cookie di sessione si riferiscono spesso a un tipo di cookie che esiste fino alla chiusura del browser. Per impostare un cookie di sessione è sufficiente NON specificare alcuna data di scadenza.

Ad esempio, puoi memorizzare il nome dell'utente nel cookie. Chi ha accesso al cookie avrà accesso al nome dell'utente. Dato che è nel cookie non abbiamo bisogno di aggiungerlo alle nostre richieste.

Session cookies è un'espressione confusionaria. I cookie di sessione si riferiscono anche ai cookie che utilizzi per gestire le sessioni. I cookie che vengono eliminati alla chiusura del browser non sono gli unici cookie che puoi utilizzare per la gestione della sessione.

I cookie persistenti non vengono cancellati dal browser quando l'utente lo chiude. Questi cookie hanno una data di scadenza che puoi impostare nel tuo server. È possibile impostare un cookie in modo che scada tra un giorno o dieci anni.

Possiamo distinguere i cookie che si trovano sullo stesso dominio dai cookie che provengono da fornitori di terze parti. L'esempio che abbiamo fornito in precedenza con Google Analytics è un esempio di un cookie di terze parti. I cookie di terze parti possono essere utilizzati per tracciare le attività degli utenti. Per impostare un cookie di terze parti, devi impostare ';domain=thirdpartydomain.com'.

I cookie sono generalmente temporanei, quindi potresti voler impostare una data di scadenza precisa. Hai due strategie:

  • Usa Expires e imposta una data di scadenza fissa. La data utilizza il formato della data HTTP: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT. Quindi, ad esempio, se vogliamo che il nostro cookie scada il 17 settembre 2020 possiamo fare:
const jacksBirthday = new Date(2020, 8, 17);
document.cookie = 'jacksage=27; expires =' + jacksBirthday.toUTCString() + ';';
  • L'utilizzo di "Max-Age" non è supportato da tutti i browser. Ma è la soluzione più valida. Forza il cookie a scadere per un certo periodo di tempo (in secondi) dopo che il client lo riceve:
// Expires after one day
const oneDayToSeconds = 24 * 60 * 60;
document.cookie =  'daily_cookie=session_identifierXYZ; max-age = ' + oneDayToSeconds + ';';

Conclusione

In questo tutorial abbiamo spiegato cosa sono i cookie e come usarli con JavaScript.