Qual è la differenza tra la creazione di cookie sul server e sul client? Questi sono chiamati cookie lato server e cookie lato client? Esiste un modo per creare cookie che possono essere letti solo sul server o sul client?
Qual è la differenza tra la creazione di cookie sul server e sul client? Questi sono chiamati cookie lato server e cookie lato client? Esiste un modo per creare cookie che possono essere letti solo sul server o sul client?
Risposte:
I cookie sono coppie chiave / valore utilizzate dai siti Web per memorizzare le informazioni di stato nel browser. Supponiamo che tu abbia un sito Web (esempio.com), quando il browser richiede una pagina Web, il sito Web può inviare cookie per memorizzare informazioni sul browser.
Esempio di richiesta del browser:
GET /index.html HTTP/1.1
Host: www.example.com
Risposta di esempio dal server:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: foo=10
Set-Cookie: bar=20; Expires=Fri, 30 Sep 2011 11:48:00 GMT
... rest of the response
Qui due cookie foo = 10 e bar = 20 vengono memorizzati nel browser. Il secondo scadrà il 30 settembre. Ad ogni successiva richiesta il browser rinvierà i cookie al server.
GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
I cookie lato server sono noti come "sessioni". Il sito Web in questo caso memorizza un singolo cookie sul browser contenente un identificatore di sessione univoco. Le informazioni sullo stato (foo = 10 e bar = 20 sopra) sono memorizzate sul server e l'identificatore di sessione viene utilizzato per abbinare la richiesta con i dati memorizzati sul server.
Puoi utilizzare sia le sessioni che i cookie per memorizzare: i dati di autenticazione, le preferenze dell'utente, il contenuto di un grafico in un sito di e-commerce, ecc ...
Di seguito pro e contro delle soluzioni. Queste sono le prime che mi vengono in mente, ce ne sono sicuramente altre.
Cookie Pro:
Contro dei cookie:
Pro della sessione:
Contro della sessione:
secure
?
Probabilmente intendi la differenza tra i cookie solo Http e la loro controparte?
Solo HTTP non è possibile accedere (leggere o scrivere) in JavaScript lato client, solo lato server. Se il flag Http Only non è impostato o il cookie viene creato in JavaScript (lato client), il cookie può essere letto e scritto in JavaScript (lato client) oltre che lato server.
Tutti i cookie sono client e server
Non c'è differenza. Un cookie normale può essere impostato lato server o lato client. Il cookie "classico" verrà restituito ad ogni richiesta. Un cookie impostato dal server verrà inviato al client in risposta. Il server invia il cookie solo quando è impostato o modificato esplicitamente, mentre il client invia il cookie ad ogni richiesta.
Ma essenzialmente è lo stesso cookie.
Ma il comportamento può cambiare
Un cookie è fondamentalmente una name=value
coppia, ma dopo il valore può esserci un gruppo di attributi separati da punto e virgola che influenzano il comportamento del cookie se è così implementato dal client (o dal server). Questi attributi possono riguardare la durata, il contesto e varie impostazioni di sicurezza.
Solo HTTP (non è solo server)
Uno di questi attributi può essere impostato da un server per indicare che si tratta di un cookie solo HTTP. Ciò significa che il cookie viene ancora inviato avanti e indietro, ma non sarà disponibile in JavaScript. Nota, però, che il biscotto è ancora lì! È solo una protezione integrata nel browser, ma se qualcuno usasse un browser ridicolmente vecchio come IE5, o un client personalizzato, potrebbe effettivamente leggere il cookie!
Quindi sembra che ci siano "cookie del server", ma in realtà non lo sono. Quei cookie vengono comunque inviati al client. Sul client non è possibile impedire l'invio di un cookie al server.
Alternative per raggiungere l'unicità
Se si desidera memorizzare un valore solo sul server o solo sul client, è necessario un altro tipo di archiviazione, come un file o un database sul server o l'archiviazione locale sul client.
document.cookie="foo=bar"
seguito da fetch("/foobar", {credentials: 'include'} )
non viene inviato alcun cookie contenente foo=bar
. Ho appena provato quel codice direttamente su questo sito usando DevTools e la console.
Sì, puoi creare cookie che possono essere letti solo lato server. Questi sono chiamati cookie "Solo HTTP", come già spiegato in altre risposte
No, non c'è modo (lo so) di creare "cookies" che possono essere letti solo dal lato client. I cookie hanno lo scopo di facilitare la comunicazione client-server.
MA, se vuoi qualcosa COME "client-only-cookies" c'è una semplice risposta: usa "Local Storage".
L'archiviazione locale è in realtà sintatticamente più semplice da utilizzare rispetto ai cookie. Un buon semplice riepilogo dei cookie rispetto all'archiviazione locale può essere trovato su:
Un punto: potresti usare i cookie creati in JavaScript per memorizzare le cose relative alla GUI che ti servono solo sul lato client. MA il cookie viene inviato al server per OGNI richiesta effettuata, entra a far parte delle intestazioni della richiesta http facendo in modo che la richiesta contenga più dati e quindi più lenta da inviare.
Se la tua pagina ha 50 risorse come immagini, file css e script, il cookie viene (in genere) inviato con ogni richiesta. Maggiori informazioni in Ogni richiesta web invia i cookie del browser?
L'archiviazione locale non presenta questi svantaggi legati al trasferimento dei dati, non invia dati. È grande.