Quelle est la différence entre créer des cookies sur le serveur et sur le client? S'agit-il de cookies côté serveur et de côté client? Existe-t-il un moyen de créer des cookies qui ne peuvent être lus que sur le serveur ou sur le client?
Les cookies sont des paires clé/valeur utilisées par les sites Web pour stocker des informations d'état sur le navigateur. Supposons que vous ayez un site Web (exemple.com). Lorsque le navigateur demande une page Web, il peut envoyer des cookies pour stocker des informations sur le navigateur.
Exemple de demande de navigateur:
GET /index.html HTTP/1.1
Host: www.example.com
Exemple de réponse du serveur:
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
Ici, deux cookies foo = 10 et bar = 20 sont stockés dans le navigateur. Le second expirera le 30 septembre. Lors de chaque demande suivante, le navigateur renverra les cookies au serveur.
GET /spec.html HTTP/1.1
Host: www.example.com
Cookie: foo=10; bar=20
Accept: */*
Les cookies côté serveur sont appelés "sessions". Dans ce cas, le site Web stocke un seul cookie sur le navigateur contenant un identifiant de session unique. Les informations d'état (foo = 10 et bar = 20 ci-dessus) sont stockées sur le serveur et l'identificateur de session est utilisé pour faire correspondre la demande aux données stockées sur le serveur.
Vous pouvez utiliser à la fois des sessions et des cookies pour stocker: des données d'authentification, les préférences de l'utilisateur, le contenu d'un graphique sur un site Web de commerce électronique, etc.
Ci-dessous le pour et le contre des solutions. Ce sont les premiers qui me viennent à l’esprit, il y en a sûrement d’autres.
Cookie Pros:
Cookie Contre:
Session Pros:
Inconvénients de la session:
Vous voulez probablement dire la différence entre cookies uniquement et leurs homologues?
Seuls les cookies ne sont pas accessibles (lus ou écrits) en JavaScript côté client, uniquement côté serveur. Si l'indicateur Http Only n'est pas défini ou si le cookie est créé dans JavaScript (côté client), le cookie peut être lu et écrit dans JavaScript (côté client) ainsi que côté serveur.
Tous les cookies sont clients et serveur
Il n'y a pas de différence. Un cookie standard peut être défini côté serveur ou côté client. Le cookie "classique" sera renvoyé à chaque demande. Un cookie défini par le serveur sera envoyé au client dans une réponse. Le serveur envoie le cookie uniquement lorsqu'il est explicitement défini ou modifié, tandis que le client envoie le cookie à chaque demande.
Mais c'est essentiellement le même cookie.
Mais, le comportement peut changer
Un cookie est fondamentalement un name=value
_ paire, mais après la valeur peut être un groupe de points-virgules séparés attributs qui affectent le comportement du cookie si = il est ainsi implémenté par le client (ou le serveur). Ces attributs peuvent concerner la durée de vie, le contexte et divers paramètres de sécurité.
HTTP uniquement (n'est pas serveur uniquement)
L'un de ces attributs peut être défini par un serveur pour indiquer qu'il s'agit d'un cookie HTTP uniquement. Cela signifie que le cookie est toujours envoyé dans les deux sens, mais il ne sera pas disponible en JavaScript. Notez cependant que le cookie est toujours là! Il ne s'agit que d'une protection intégrée dans le navigateur, mais si quelqu'un utilise un navigateur ridiculement ancien comme IE5 ou un client personnalisé, il peut en réalité lire le cookie!
Il semble donc qu'il existe des "cookies de serveur", mais il n'y en a pas. Ces cookies sont toujours envoyés au client. Sur le client, il n’ya aucun moyen d’empêcher l’envoi d’un cookie au serveur.
Alternatives pour atteindre la "seule chose"
Si vous souhaitez stocker une valeur uniquement sur le serveur ou uniquement sur le client, vous aurez besoin d'un autre type de stockage, tel qu'un fichier ou une base de données sur le serveur, ou un stockage local sur le client.
Oui, vous pouvez créer des cookies qui ne peuvent être lus que sur le serveur. Celles-ci sont appelées "cookies HTTP uniquement", comme expliqué dans d'autres réponses déjà
Non, il n'y a aucun moyen (à ma connaissance) de créer des "cookies" qui ne peuvent être lus que du côté client. Les cookies sont destinés à faciliter la communication client-serveur.
MAIS, si vous voulez quelque chose comme des "cookies réservés aux clients", la réponse est simple: utilisez "Stockage local".
Stockage local est en réalité plus simple à utiliser syntaxiquement que les cookies. Vous trouverez un bon résumé simple des cookies par rapport au stockage local à l'adresse suivante:
Un point: vous pouvez utiliser des cookies créés en JavaScript pour stocker les éléments liés à l’interface graphique dont vous avez besoin uniquement du côté client. MAIS le cookie est envoyé au serveur pour CHAQUE requête, il fait partie des en-têtes de la requête http, ce qui fait que la requête contient plus de données et est donc plus lente à envoyer.
Si votre page contient 50 ressources telles que des images, des fichiers css et des scripts, le cookie est (généralement) envoyé avec chaque demande. Plus à ce sujet dans Chaque demande Web envoie-t-elle des cookies au navigateur?
Le stockage local n'a pas ces inconvénients liés au transfert de données, il n'envoie pas de données. C'est super.