Un modo comune per verificare il supporto dei cookie è tramite un reindirizzamento.
È una buona idea farlo solo quando l'utente sta cercando di fare qualcosa che avvia una sessione, come accedere o aggiungere qualcosa al carrello. Altrimenti, a seconda di come lo gestisci, stai potenzialmente bloccando l'accesso al tuo intero sito per gli utenti - o bot - che non supportano i cookie.
Innanzitutto, il server controlla i dati di accesso normalmente: se i dati di accesso sono errati, l'utente riceve quel feedback normalmente. Se è corretto, il server risponde immediatamente con un cookie e un reindirizzamento a una pagina progettata per verificare la presenza di quel cookie, che potrebbe essere lo stesso URL ma con qualche flag aggiunto alla stringa di query. Se la seconda pagina non riceve il cookie, l'utente riceve un messaggio che informa che non può accedere perché i cookie sono disabilitati sul proprio browser.
Se stai già seguendo lo schema Post-Reindirizzamento-Ottieni per il tuo modulo di accesso, questa impostazione e il controllo del cookie non aggiungono ulteriori richieste: il cookie può essere impostato durante il reindirizzamento esistente e controllato dalla destinazione caricata dopo il reindirizzamento.
Ora, perché eseguo un test dei cookie solo dopo un'azione avviata dall'utente diversa dal caricamento di ogni pagina. Ho visto siti implementare un test dei cookie su ogni singola pagina, senza rendersi conto che questo avrà effetti su cose come i motori di ricerca che tentano di eseguire la scansione del sito. Cioè, se un utente ha i cookie abilitati, il cookie di prova viene impostato una volta, quindi deve solo sopportare un reindirizzamento sulla prima pagina richiesta e da quel momento in poi non ci sono reindirizzamenti. Tuttavia, per qualsiasi browser o altro user-agent, come un motore di ricerca, che non restituisce cookie, ogni singola pagina potrebbe semplicemente risultare in un reindirizzamento.
Un altro metodo per verificare il supporto dei cookie è con Javascript: in questo modo non è necessario alcun reindirizzamento, puoi scrivere un cookie e leggerlo di nuovo praticamente immediatamente per vedere se è stato memorizzato e quindi recuperato. Lo svantaggio di questo è che viene eseguito in script su lato client, cioè se vuoi ancora che il messaggio se i cookie siano supportati per tornare al server, devi comunque organizzarlo, come con una chiamata Ajax.
Per la mia applicazione, implemento una certa protezione per gli attacchi "Login CSRF", una variante degli attacchi CSRF, impostando un cookie contenente un token casuale nella schermata di accesso prima che l'utente effettui l'accesso e controllando quel token quando l'utente invia il proprio login dettagli. Ulteriori informazioni su Login CSRF da Google. Un effetto collaterale di questo è che nel momento in cui effettuano l'accesso, posso verificare l'esistenza di quel cookie: non è necessario un reindirizzamento aggiuntivo.