web-dev-qa-db-fra.com

Quelle est la différence entre le cookie côté serveur et le cookie côté client?

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?

99
Rahul

Cookies HTTP

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: */*

SESSIONS: Cookies côté serveur

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.

Exemples d'utilisation

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.

Avantages et inconvénients

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:

  • l'évolutivité: toutes les données sont stockées dans le navigateur afin que chaque demande puisse passer par un équilibreur de charge à différents serveurs Web et vous disposiez de toutes les informations nécessaires pour répondre à la demande;
  • ils sont accessibles via javascript sur le navigateur;
  • n'étant pas sur le serveur, ils survivront au redémarrage du serveur;
  • RESTful: les requêtes ne dépendent pas de l'état du serveur

Cookie Contre:

Session Pros:

  • généralement plus facile à utiliser, dans PHP il n'y a probablement pas beaucoup de différence.
  • stockage illimité

Inconvénients de la session:

  • plus difficile à l'échelle
  • sur les redémarrages du serveur Web, vous pouvez perdre toutes les sessions ou non en fonction de la mise en œuvre
  • pas reposant
128
filippo

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.

52
nikc.org

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.

29
GolezTrol
  1. 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à

  2. 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.

  3. 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:

https://courses.cs.washington.edu/courses/cse154/12au/lectures/slides/lecture21-client-storage.shtml#slide8

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.

3
Panu Logic