web-dev-qa-db-fra.com

Quelle est la taille maximale d'un cookie et combien peuvent être stockés dans un navigateur pour chaque site Web?

Je découvre les cookies et je m'interroge sur la prise en charge des navigateurs lors de la rédaction d'applications Web qui reposent sur des cookies pour stocker l'état.

  • Pour chaque domaine/site Web, combien de cookies peuvent être envoyés à un navigateur et de quelle taille?

  • Si plusieurs cookies sont envoyés et stockés, cela affecte-t-il les performances?

42
giri

Tout d'abord, je vous suggère de ne pas vous soucier de ce problème. Il y a une salle AMPLE pour sérialiser des tonnes d'identifiants. 

Deuxièmement, il n'est pas stocké par web-server mais par web-domain - par exemple, www.google.com et non par centaine de serveurs physiques différents desservant le domaine Google. 

Troisièmement, si vous devez vous inquiéter, sachez qu’il existe deux en-têtes de cookies possibles. La taille de ces en-têtes de cookie est déterminée par les limites du logiciel de navigation.

Discussion de conception

Ce que vous ne voulez pas utiliser dans l'en-tête du cookie, c'est envoyer des détails sur la session d'un client. Par exemple, n'essayez pas de bourrer l'email qu'un client est en train de taper dans un cookie si vous construisez un front-end d'email. Au lieu de cela, vous enverriez au client un cookie qui représente son identité + session: vous stockez toutes les données de session sur cette identité. Vous pouvez stocker des dizaines d'identifiants (4 à 16 octets) par en-tête de cookie, et nul n'a besoin de plus de 4, par exemple. Les données des cookies (sous forme d’entier) ont tendance à être codées en base64 , ce qui augmente le nombre d’octets.

Performance

Votre navigateur envoie une multitude d'en-têtes à un serveur Web. Le cookie ne contient que 100 à 1 000 octets (la plupart plus proches de 100). Aux deux extrêmes, il ne faut qu'une fraction du temps pour les envoyer au serveur Web - une fois replacées dans leur contexte. N'oubliez pas que le Web repose sur des protocoles textuels.

14
Hassan Syed

Pas plus de 50 cookies par domaine, avec un maximum de 4 Ko par cookie (ou même 4 Ko au total, voir réponse de Iain ). Sur IE 6, il y avait 20 cookies par domaine.

En règle générale, il est recommandé de conserver l'état sur le serveur et d'utiliser les cookies uniquement pour le suivi de session. Elles sont envoyées avec chaque demande. Elles constituent donc une surcharge inutile si l'objectif est de conserver l'état de la session.

Si vous souhaitez conserver l'état sur le client et que vous pouvez utiliser JavaScript pour le faire, il existe des options. Utilisez directement les API de stockage assorties ou recherchez une bibliothèque de wrapper qui en extrait les détails.

Options de stockage côté client:

  • localStorage : Firefox 2+, Chrome 4+, Safari 4+, Internet Explorer 8+. 5 Mo par domaine sans confirmation de l'utilisateur (mais sachez qu'il est stocké au format UTF-16 pour pouvoir utiliser deux octets par caractère).
  • IndexedDB : Firefox 4+, Chrome 11+, Safari 10+, Internet Explorer 10+. 5 Mo par domaine sans confirmation de l'utilisateur, bien plus après confirmation (très spécifique du navigateur, consultez votre navigateur pour plus de détails).

Options de stockage obsolètes:

  • Stockage persistant de Flash 8: n’importe quel navigateur doté de Flash 8+. 100 Ko, plus avec l'autorisation de l'utilisateur. Déconseillé car Flash lui-même est déconseillé.
  • userData : Internet Explorer 5.5+. 64 Ko par domaine dans la zone restreinte, 128 Ko par domaine dans la zone Internet. Remplacé par localStorage.
  • Web SQL : Chrome et Safari uniquement, il ne sera jamais accessible aux autres navigateurs car il était impossible de le normaliser } _.

Donc, généralement pour le stockage côté client, cela dépend du cas d'utilisation:

  • Pour les suivis d'identifiant de session ou pour quelques Ko, utilisez des cookies.
  • Jusqu'à 2 Mo, le stockage local fournit une solution pour tous les navigateurs courants.
  • 2 Mo et plus, utilisez IndexedDB (recherchez une bonne bibliothèque de wrapper).
49
Joeri Sebrechts

Limites de taille de cookie

Si vous souhaitez prendre en charge la plupart des navigateurs, ne dépassez pas 50 cookies par domaine et 4093 octets par domaine. Autrement dit, la taille de tous les cookies ne doit pas dépasser 4093 octets.

Pensées de performance

Des cookies sont envoyés à chaque demande de domaine, y compris les images. Supposons que vous avez 30 ressources sur votre site web et 4093 octets de cookies. Cela signifie que l'utilisateur télécharge 122 Ko de données. Donc, si j'ai une connexion de téléchargement de 1 Mbit, cela prendra au moins 1 seconde. 

Si vous souhaitez voir la page de test des cookies que j'ai créée ou en savoir plus à ce sujet, consultez Limites des cookies de navigateur .

24
Iain

Si vous craignez des baisses de performances dues à l’envoi de gros cookies à chaque requête de serveur, une bonne idée serait de placer tous vos fichiers statiques (images, CSS, etc.) dans un sous-domaine de votre site, tel que http://static.yourdomain.com.

De cette manière, chaque fois que votre site sur www.yourdomain.com demande un fichier statique, tel qu'une image, le navigateur n'envoie plus le cookie avec la requête HTTP.

Source: http://developer.yahoo.com/performance/rules.html#cookie_free

5
Marco Demaio

Différents navigateurs ont des limites de taille différentes pour les cookies. Voici les informations pour IE . Ici est une page qui répertorie plusieurs navigateurs.

Les cookies ne sont pas enregistrés sur un serveur, mais sur domain (un serveur peut héberger plusieurs domaines ou l'inverse, une batterie de serveurs peut desservir un seul domaine).

En général, j'éviterais de conserver de nombreuses informations dans les cookies, car les données sont envoyées vers et depuis le navigateur à chaque demande. Comme vous le suggérez dans votre question, cela peut avoir un effet sur les performances.

On stocke généralement de petites quantités de données dans le cookie, principalement utilisées pour identifier l'utilisateur/la session afin de pouvoir extraire davantage de données d'une base de données ou d'une autre ressource locale du serveur Web.

4
Oded

4096 octets Le vrai problème, cependant, vient lorsque vous essayez de définir des cookies de grande taille. Les normes stipulent qu'un navigateur doit prendre en charge un minimum de 4096 octets par cookie. IE6 ne fait pas cela. Au lieu de cela, il semble avoir une taille maximale de 4096 octets pour tous les cookies d'un domaine.

3
Ritesh Aryal

Si vous programmez un site Web, il est conseillé de ne pas stocker trop de données dans un cookie, car ce dernier est envoyé au serveur chaque fois que l'utilisateur demande une page à votre site. Une solution bien meilleure consiste simplement à stocker un identifiant unique dans le cookie et à laisser le serveur extraire les informations requises dans une base de données ou un magasin de fichiers en fonction de cet identifiant unique. Malheureusement, cette solution a pour conséquence que les internautes se soucient de ce que vous suivez à leur sujet. Vous voudrez donc peut-être définir une "politique de cookie" quelque part sur votre site. ne pas suivre à leur sujet.

3
Paul Tomblin

Voici un très bon site sur les limites de cookies et vous permet de tester votre navigateur:

http://browsercookielimits.squawky.net/

0
rboarman

CDN vient à la rescousse.

Vous pouvez décharger votre contenu statique sur un CDN ou un service de stockage de fichiers tel qu'Amazon S3. Conserver les demandes de fichiers statiques sans cookies devrait être simple, tant que vous n'avez pas configuré d'enregistrement CNAME sur un sous-domaine recevant des cookies de votre haut. domaine de niveau. 

This Blog Post est une bonne lecture de Serving Static Content à partir d'un domaine sans cookie et comment pouvons-nous adopter cette meilleure pratique pour améliorer nos performances du côté client.

0