I cookie sono stati inventati nel 1994 da un programmatore di nome Lou Montulli. Senza cookie, il web sarebbe un posto completamente diverso. Anche se non ve ne rendete conto, usate e interagite con i cookie ogni giorno, sia che vi registriate nel back-end del vostro sito WordPress o che chiudiate una fastidiosa finestra di popup.

A questo punto, probabilmente avrete già capito che, quando parliamo di cookie, intendiamo i cookie utilizzati per memorizzare informazioni importanti per i visitatori su un sito web, non quelli con le gocce di cioccolato. 🍪

Oggi esploreremo l’argomento, a volte un po’ complicato, dei cookie e delle sessioni PHP. In particolare, tutto quello che dovete sapere su come vengono utilizzati in WordPress, con alcuni dei problemi più comuni che dovreste conoscere (soprattutto come sviluppatori) specialmente quando si tratta del vostro sito web, di codice personalizzato o dell’utilizzo di un plugin di terze parti. A nostro parere, questo argomento non è mai discusso abbastanza.

Tipi di cookie

Esistono due diversi tipi di cookie comunemente impostati: i cookie di sessione e i cookie persistenti.

Cookie di sessione

I cookie di sessione, noti anche come cookie transitori, sono temporanei. Non hanno una data di scadenza e memorizzano solo informazioni su ciò che l’utente fa durante una singola sessione. Una sessione è semplicemente un valore univoco generato casualmente che viene assegnato quando qualcuno visita un sito web. I cookie di sessione sono memorizzati temporaneamente in memoria e vengono automaticamente rimossi quando il browser viene chiuso o la sessione termina.

Lettura consigliata: Come aumentare il limite di memoria di PHP in WordPress.

Cookie persistenti

I cookie persistenti, come avrete intuito, sono quelli che contengono una data di scadenza. Questi durano molto più a lungo e vengono memorizzati su disco fino alla loro scadenza o vengono cancellati manualmente dall’utente. Sono anche chiamati “tracking cookies“, in quanto sono i tipi di cookie che usano Google Analytics, AdRoll, Stripe, ecc.

Il nostro programma di affiliazione di Kinsta è un altro esempio. Un cookie di 60 giorni viene inserito nel browser dell’utente quando questi clicca su un link di affiliazione. Questo assicura che il referrer riceva il giusto credito, anche se la persona ha chiuso e riaperto il suo browser più volte.

Come il core di WordPress utilizza i cookie

Quando ci riferiamo al core di WordPress, intendiamo semplicemente i file che compongono il progetto open source, prima di installare qualsiasi plugin o tema di terze parti. È WordPress nel suo stato naturale, come ci piace chiamarlo.

Ora che avete una prima idea di cosa sia un cookie e quali sono i diversi tipi di cookie, diamo un’occhiata al perché e al modo in cui il core di WordPress li usa per far accadere la magia dietro le quinte. Curiosità: il termine cookie è derivato dal termine originale di “cookie magico“.

Il nucleo di WordPress utilizza i cookie per due diversi scopi:

1. Cookie di accesso

I cookie di accesso contengono i dati di autenticazione e vengono utilizzati quando un utente accede alla bacheca di amministrazione di WordPress. Secondo il Codex di WordPress, vengono impostati un paio di cookie di sessione diversi:

  • Al momento del login, WordPress utilizza il cookie wordpress_[hash] per memorizzare i dettagli di autenticazione (limitatamente all’area /wp-admin/).
  • Dopo il login, WordPress imposta il cookie wordpress_logged_in_[hash]. Questo indica quando ci si è connessi e chi è l’utente connesso.

Quando si tenta di accedere al back-end del proprio sito, WordPress verifica se i due cookie di cui sopra esistono e non sono scaduti. Questo è ciò che permette di bypassare magicamente la schermata wp-login.php. 😉

WordPress imposta anche i cookie wp-settings-{time}-[UID]. L’ID è il vostro ID utente dalla tabella del database utenti di WordPress. Questo memorizza le impostazioni del cruscotto personale e dell’interfaccia di amministrazione.

2. Cookie di commenti

Di default, vengono impostati dei cookie quando qualcuno commenta un post del blog (con una scadenza di 347 giorni). In questo modo, se tornano a visitare il sito, non devono inserire di nuovo tutte le informazioni. Sono memorizzati i seguenti tre cookie:

  • comment_author_[hash]
  • comment_author_email_[hash]
  • comment_author_url_[hash]

Tuttavia, con i recenti cambiamenti della politica sulla privacy dovuti al GDPR, sono stati introdotti nuovi strumenti nel core di WordPress per assicurarsi che gli utenti accettino l’installazione di questi cookie. Questa impostazione, se non è stato già fatto, può essere attivata in “Impostazioni → Discussione” nel cruscotto di amministrazione di WordPress. Selezionate l’opzione “Mostra casella di controllo di attivazione dei cookie dei commenti, che consente di impostare i cookie dell’autore del commento”. Anche il popolare plugin Akismet permette di visualizzare un avviso sulla privacy.

Mostra checkbox di attivazione dei cookie dei commenti
Mostra checkbox di attivazione dei cookie dei commenti

Come i plugin e i temi WordPress di terze parti utilizzano i cookie

Come WordPress, anche i plugin di terze parti e i temi che installate usano i cookie. La maggior parte di essi utilizza una combinazione di cookie del browser e di righe di database nella tabella wp_options o in una propria tabella personalizzata. Questo perché WordPress è stateless.

Un’applicazione stateless è un programma applicativo che non salva i dati del cliente generati in una sessione per utilizzarli nella sessione successiva con quel cliente. Ogni sessione si svolge come se fosse la prima e le risposte non dipendono dai dati di una sessione precedente. – TechTarget

Con le nuove leggi sulla privacy, è importante capire quali sono i cookie impostati e se i visitatori possono scegliere se accedervi o meno. Suggerimento: non tutti i cookie richiedono un modulo di conferma. Leggete il nostro post approfondito sul GDPR per comprendere meglio i nuovi requisiti.

Ecco un paio dei tanti esempi di utilizzo dei cookie:

  • Se avete un popup box sul vostro sito WordPress e un visitatore lo chiude, questo normalmente imposterà un cookie in modo che non venga più visualizzato.
  • Articoli aggiunti al carrello del vostro sito di e-commerce. Un cookie viene memorizzato in modo che il carrello della spesa conservi i vostri prodotti mentre continuate a navigare nel sito.
  • Le funzionalità di geolocalizzazione IP potrebbero memorizzare l’indirizzo IP e le coordinate latitudine/longitudine del visitatore che naviga nel sito. Questo è normalmente utilizzato per mostrare contenuti specifici ad una certa regione o anche per reindirizzare l’utente verso un sottosito diverso.
  • Tracciamento dell’attività attraverso i click con un abbreviatore di link come il plugin PrettyLinks.
  • Il plugin per le newsletter potrebbe impostare un cookie per gli utenti che si sono già iscritti, questo dà la possibilità di nascondere completamente la casella della newsletter.

Essenzialmente qualsiasi azione o modulo di scelta su un sito WordPress in genere comporta l’installazione di un cookie nel browser. L’obiettivo è, naturalmente, quello di cercare di migliorare l’esperienza del browser o di fornire funzionalità aggiuntive attraverso la verifica.

I cookie di WooCommerce

I plugin di e-commerce come WooCommerce installano i loro cookie in modo che gli acquirenti possano facilmente aggiungere cose al loro carrello, memorizzandole per il futuro quando fanno il checkout, ed effettuare il log in e il log out dal proprio account.

Per tenere traccia dei dati del carrello, WooCommerce installa i seguenti tre cookie (nei cookie non vengono memorizzate informazioni personali):

  • woocommerce_cart_hash
  • woocommerce_items_in_cart
  • wp_woocommerce_session_

I primi due cookie contengono informazioni sul carrello e permettono semplicemente a WooCommerce di sapere quando i dati del carrello cambiano. Il terzo cookie wp_woocommerce_session_ contiene un codice univoco per ogni cliente che corrisponde a una voce nella tabella personalizzata wp_woocommerce_sessions del database.

wp_woocommerce_sessions table
La tabella wp_woocommerce_sessions

I dati di wp_commerce_session_ erano precedentemente memorizzati nella tabella wp_options, ma sono stati spostati in tabella personalizzata in WooCommerce 2.5 quando è stato introdotto un nuovo gestore di sessione. Questo per migliorare le prestazioni, la scalabilità e la gestione delle sessioni. Altrimenti, si finisce rapidamente per avere una tabella wp_options gonfia da ripulire.

I cookie di Easy Digitial Downloads

Easy Digital Downloads utilizza di default WP_Session, che è una combinazione di cookie del browser e file del database memorizzati nella tabella wp_options. Di seguito è riportato il cookie installato:

  • edd_items_in_cart

Cookie e cache di WordPress

Le cose si complicano quando entra in gioco la cache di WordPress. La cache è essenzialmente un’area dove vengono memorizzate le risorse di una richiesta per il riutilizzo con le richieste successive. Fondamentalmente, riduce la quantità di lavoro necessario per generare una visualizzazione della pagina. Anche se la cache è ottima per le prestazioni, causa un problema quando ci sono i cookie.

Perché? Perché i cookie sono lì per eseguire una certa azione, come mantenere il carrello della spesa popolato mentre si naviga in un sito WooCommerce. Tuttavia, se una pagina viene servita dalla cache, né PHP né il database fanno nulla, il server serve semplicemente una copia statica della pagina.

Allora, cosa si può fare?

1. Utilizzare JavaScript

La prima opzione sarebbe quella di utilizzare JavaScript e aggiornare il contenuto di una pagina in modo dinamico. Fondamentalmente, si dispone di segnaposto HTML e si utilizza JavaScript per richiamare informazioni tramite una API o una chiamata ajax.

Un esempio potrebbe essere il caricamento di un elenco di post nella barra laterale di WordPress utilizzando JavaScript per prendere una lista di post sulla wp-api e poi renderli nella barra laterale. In questo modo si potrebbe aggiornare la lista dei post senza cancellare la pagina dalla cache, perché i dati vengono generati dinamicamente.

Non è l’ideale, però è sempre meglio mettere in cache se possibile in termini di prestazioni. Ma se c’è un po’ di contenuto che deve rimanere dinamico mentre la pagina stessa può rimanere statica (servita dalla cache), questo è un modo per farlo – usare JavaScript per tirare giù il contenuto di quella parte della pagina dinamicamente tramite una chiamata API/ajax. Tuttavia, a meno che non si possa assumere uno sviluppatore WordPress per costruire una soluzione JavaScript personalizzata o l’estensione di un plugin, questa opzione di solito non è molto pratica.

2. Utilizzare le chiamate Admin-Ajax

Admin-ajax.php non può essere memorizzato nella cache, quindi è possibile utilizzare le chiamate admin-ajax. Un buon esempio di questo è il plugin No Cache AJAX Widgets. Questo plugin effettua chiamate admin-ajax e quindi non deve preoccuparsi di entrare in conflitto con soluzioni di caching a livello di server o di terze parti.

Tuttavia, proprio come succede con JavaScript, percorrere questa strada non è di solito fattibile per l’utente medio. Può anche portare ad altri problemi di prestazioni, come l’elevato utilizzo di admin-ajax e molte richieste non memorizzate in cache.

3. Escludere le pagine dalla cache (quando il cookie è presente)

A meno che non si possa optare per la soluzione JavaScript o admin-ajax, escludere le pagine dalla cache quando è presente un cookie specifico è il modo migliore di procedere. È quello che normalmente raccomandiamo, specialmente a chi gestisce siti altamente dinamici come WooCommerce e Easy Digital Downloads.

Da Kinsta, alcune pagine di WooCommerce e Easy Digital Downloads come il carrello, il mio account e il checkout, sono automaticamente escluse dalla cache. Esiste una regola a livello di server in modo che gli utenti bypassino automaticamente la cache quando viene rilevato il cookie woocommerce_items_in_cart o il cookie edd_items_in_cart, per garantire un processo di checkout fluido e sincronizzato.

Ascoltiamo anche i cookie associati al login e impostiamo la cache in modo che venga bypassata quando rileviamo che qualcuno ha effettuato il login in WordPress. In questo modo si evita che il back-end venga accidentalmente memorizzato nella cache.

Di default, non escludiamo il cookie wp_woocommerce_session_ dalla memorizzazione nella cache. La maggior parte dei siti WooCommerce nella nostra esperienza non ha alcun problema. Questo migliora anche le prestazioni aumentando il report HIT della cache, pur utilizzando meno PHP worker.

Tuttavia, per le diverse configurazioni del tema WordPress e dei plugin, possiamo escludere il cookie wp_woocommerce_session_ dalla cache se necessario. Basta contattare il nostro team di supporto. Il risultato è che, una volta che un utente aggiunge un prodotto al suo carrello, tutte le richieste successive non saranno servite dalla cache, aumentando l’utilizzo dei PHP worker.

Se avete bisogno di escludere dalla cache una pagina specifica, aprite un ticket con il nostro team di supporto. Anche in questo caso, bisogna stare attento quando si tratta di esclusioni. Troppe pagine non in cache potrebbero davvero peggiorare le prestazioni. Date anche un’occhiata al nostro articolo sulle cose da fare e da non fare per l’hosting dei siti WordPress di affiliazione.

Come vedere e cancellare i cookie

È facile vedere e cancellare i cookie su un sito web. Per vedere quali sono i cookie installati su un sito specifico, navigate su quel sito e cliccate sull’icona del lucchetto in alto. Poi fate clic su “Cookies”.

Cookie in uso
Cookie in uso

Poi andate alla cartella di quel sito web. Nell’esempio qui sotto, potete vedere che abbiamo alcuni cookie di WooCommerce, così come il cookie wordpress_logged_in_[hash]. Potete anche vedere il tempo di scadenza e se si tratta di un cookie persistente o di un cookie di sessione (quando la sessione di navigazione termina).

Cookies WordPress
Cookie di WordPress

Per rimuovere un cookie, basta cliccare su un singolo cookie e poi sul pulsante “Rimuovi”. È possibile farlo anche a livello di cartella o in Chrome DevTools.

Cancellare i cookie può anche aiutarvi a risolvere l’errore 304.

In alternativa, è possibile cercare o cancellare tutti i cookie nel browser.

GDPR e cookie

Il GDPR è una nuova legge sulla privacy entrata in vigore il 25 maggio 2018. È stata concepita per restituire ai cittadini il controllo dei propri dati personali. Se non l’avete già letto, consigliamo vivamente di leggere il nostro articolo di approfondimento: La verità sulla conformità al GDPR per gli utenti di WordPress. È un argomento che non può essere riassunto in un paragrafo!

Ecco l’esempio di una modifica che abbiamo apportato su Kinsta per uniformarci alla nuova legge. Quando visitate il nostro sito per la prima volta, potreste averlo già visto, viene visualizzato il messaggio “Accetta i cookie” nella parte inferiore dello schermo. Questo perché ora siamo obbligati per legge a fornire agli utenti un modo per scegliere se accettare o meno l’installazione dei cookie. Sono finiti i giorni in cui si poteva eseguire ciò che si voleva senza informare gli utenti della raccolta dei dati.

Accettare i cookie
Accettare i cookie

Se si fa clic su “Accetta i cookie”, vengono installati tutti i cookie per l’utente corrente. Se si fa clic su “Impostazioni cookie”, c’è ora un modo per accettare e rifiutare qualsiasi cookie vogliate.

Impostazioni dei cookie
Impostazioni dei cookie

Non male, vero? La nostra soluzione per i cookie è stata costruita internamente dai nostri sviluppatori, ma ecco alcuni utili plugin WordPress per la conformità al GDPR che possono aiutarvi a realizzare qualcosa di simile. Anche in questo caso, i cookie sono solo una piccola parte per essere pienamente conformi al GDPR.

Sessioni PHP

Le sessioni PHP sono un’alternativa all’approccio standard dei cookie. È sempre un cookie, ma si chiama PHPSESSID ed è normalmente memorizzato nella directory /tmp/ sullo stesso server web. Il modo in cui il server sa di associare una data sessione a una data richiesta è che è anche memorizzato in un cookie HTTP.

Cookies HTTP PHPSESSID
Cookie HTTP PHPSESSID

Questo può essere visto anche sotto l’intestazione HTTP di un sito.

Cookie dell'intestazione HTTP PHPSESSID
Cookie dell’intestazione HTTP PHPSESSID

Una sessione PHP è molto simile a una normale sessione che termina quando l’utente chiude il proprio browser.

La questione con le sessioni PHP si riduce a problemi di performance e di caching. Le informazioni memorizzate nel cookie del browser devono rimbalzare avanti e indietro ad ogni richiesta in modo che il server sappia chi è l’utente. Questo significa che, per i siti che usano PHPSESSID, l’host dovrebbe impostare il PHPSESSID per bypassare la cache. Tuttavia, il risultato è che PHPSESSID dovrebbe essere impostato per bypassare il 100% delle volte, perché, a differenza di wordpress_logged_in, il PHPSESSID è impostato su ogni singola richiesta PHP.

Immaginate quindi se il wordpress_logged_in dovesse essere impostato al 100% per consentire il funzionamento delle funzionalità di login. Ciò significa che anche gli utenti che hanno effettuato il log-out dovrebbero avere il cookie e dovrebbe essere unico per loro. Immaginate se questo fosse necessario per far funzionare il sistema di login di WordPress. In questo scenario, ogni singola pagina visualizzata dovrebbe bypassare la cache in modo che il cookie wordpress_logged_in sia impostato correttamente sia per gli utenti autenticati che per quelli non autenticati.

Questo è il problema di PHPSESSID. Dato che viene generato su ogni singola richiesta PHP, se un sito si basa sui cookie PHPSESSID, l’host dovrebbe impostare PHPSESSID in modo da bypassare la cache il 100% delle volte. Altrimenti, PHPSESSID finisce nella cache e crea disordine con qualsiasi funzionalità si basi su di esso.

Non consigliamo di utilizzare le sessioni PHP e di solito non funzionano nel nostro ambiente Kinsta. Le sessioni PHP hanno anche altre implicazioni sulla sicurezza che dovrebbero essere tenute in considerazione.

Se vedete del codice che utilizza session_start sul vostro sito, questo significa che utilizza sessioni PHP.

Molti sviluppatori di plugin e di temi sono passati a utilizzare una combinazione di cookie del browser e di righe del database (sia nella tabella wp_options che in una propria tabella personalizzata). Se avete bisogno di dati di sessione, questo è l’approccio migliore.

Contattate il nostro team di supporto se avete altre domande sulle sessioni PHP.

Riepilogo

Ci auguriamo che ora sia un po’ più chiaro come funzionano i cookie di WordPress e le sessioni PHP. I cookie sono ciò che fa girare il mondo e sono importanti per quasi tutto ciò che accade su un sito WordPress. Dal tenerci connessi, al garantire un’esperienza fluida con il carrello della spesa, fino a far sì che una finestra di popup rimanga chiusa.

Altre domande sui cookie? 🍪 Scrivetecele qui sotto nei commenti.

Brian Jackson

Brian ha una grande passione per WordPress, lo usa da più di dieci anni e sviluppa anche un paio di plugin premium. Brian ama i blog, i film e le escursioni. Entra in contatto con Brian su Twitter.