¿Cuál es el tamaño máximo de una cookie y cuántos se pueden almacenar en un navegador para cada sitio web?

Estoy aprendiendo sobre las cookies, y me pregunto sobre el soporte del navegador cuando escribo aplicaciones web que dependen de las cookies para almacenar el estado.

En primer lugar, sugiero que no te preocupes por este problema. Hay AMPLIO espacio para serializar toneladas de identificadores.

En segundo lugar, no está almacenado por web-server sino por web-domain , por ejemplo, www.google.com y no los 100 de servidores físicos diferentes que prestan servicios al dominio de Google.

En tercer lugar, si tiene que preocuparse, sepa que hay dos posibles encabezados de cookies . Los tamaños de estos encabezados de cookies están determinados por los límites del software del navegador.

Discusión de diseño

Lo que no quiere usar es el encabezado de la cookie para enviar detalles sobre la sesión de un cliente. Por ejemplo, no intente rellenar el correo electrónico que un cliente está escribiendo en una cookie si está creando un front-end de correo electrónico. En su lugar, le enviarías al cliente una cookie que representa su identidad + sesión: almacenas todos los datos de las sesiones con esta identidad. Puede almacenar decenas de identificadores (4-16 bytes) por encabezado de cookie y nadie necesita más que 4 de estos. Los datos de cookies (como un número entero) tienden a codificarse en base64, lo que aumenta el recuento de bytes.

Actuación

Su navegador envía una plétora de encabezados a un servidor web. La cookie es solo otro 100-1000 bytes (en su mayoría más cerca de 100). En ambos extremos, solo lleva una fracción de tiempo enviarlos al servidor web, cuando se los coloca en contexto, por supuesto. Debe tener en cuenta que la web se basa en protocolos basados ​​en texto.

No más de 50 cookies por dominio, con un máximo de 4 KB por cookie (o incluso 4 KB en total, vea la respuesta de Iain ). En IE 6 solía haber 20 cookies por dominio.

En general, se recomienda preservar el estado en el servidor y usar cookies solo para el seguimiento de la sesión. Se envían junto con cada solicitud, por lo que forman una sobrecarga innecesaria si el propósito es mantener el estado de la sesión.

Si desea mantener el estado en el cliente y puede usar JavaScript para hacerlo, hay opciones. Utilice la API de almacenamiento surtida directamente o busque una biblioteca contenedora que abstraiga los detalles.

Opciones de almacenamiento del lado del cliente:

  • localStorage : Firefox 2+, Chrome 4+, Safari 4+, Internet Explorer 8+. 5 MB por dominio sin confirmación del usuario (pero tenga en cuenta que está almacenado como UTF-16, por lo que puede usar dos bytes por carácter).
  • IndexedDB : Firefox 4+, Chrome 11+, Safari 10+, Internet Explorer 10+. 5 MB por dominio sin confirmación del usuario, mucho más después de la confirmación (altamente específico del navegador, verifique su navegador para más detalles).

Opciones de almacenamiento obsoletas:

  • Almacenamiento persistente de Flash 8: cualquier navegador con Flash 8+. 100 KB, más con permiso del usuario. Obsoleto porque Flash en sí está en desuso.
  • userData : Internet Explorer 5.5+. 64 KB por dominio en la zona restringida, 128 KB por dominio en la zona de Internet. Reemplazado por localStorage.
  • Web SQL : solo Chrome y Safari, nunca llegará a otros navegadores porque no fue posible estandarizarlo .

Por lo tanto, generalmente para el almacenamiento del lado del cliente depende del caso de uso:

  • Para el seguimiento de identificación de sesión o para algunos KB, use cookies.
  • Hasta 2 MB, localstorage ofrece una solución en todos los navegadores comunes.
  • 2 MB o más, usa IndexedDB (busca una buena biblioteca de contenedor).

Límites de tamaño de cookies

Si desea admitir la mayoría de los navegadores, no exceda las 50 cookies por dominio y 4093 bytes por dominio . Es decir, el tamaño de todas las cookies no debe exceder 4093 bytes.

Pensamientos de rendimiento

Las cookies se envían cada vez que se solicita un dominio, esto incluye imágenes. Por razones de argumentos, digamos que tiene 30 recursos en su sitio web y tiene 4093 bytes de cookies. Eso significa que el usuario está cargando 122 Kb de datos. Entonces, si tengo una conexión de carga de 1Mbit, tomará al menos 1 segundo.

Si desea ver la página de prueba de cookies que creé, o leer más al respecto, consulte Límites de cookies del navegador .

Si le preocupa la disminución del rendimiento debido a que se envían cookies grandes en cada solicitud del servidor, una buena idea podría ser colocar todos sus archivos estáticos (imágenes, CSS, etc.) en un subdominio de su sitio, como http://static.yourdomain.com .

De esta forma, cada vez que su sitio en www.yourdomain.com solicita un archivo estático, como una imagen, el navegador ya no enviará la cookie junto con la solicitud HTTP.

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

Las diferentes browswers tienen diferentes límites de tamaño en las cookies. Aquí está la información para IE . Aquí hay una página que enumera varios navegadores.

Las cookies no se guardan en un servidor, sino en un dominio (un servidor puede albergar muchos dominios o al revés, una granja de servidores puede estar sirviendo un solo dominio).

En general, evitaría guardar mucha información en las cookies, ya que los datos se envían desde y hacia el navegador en cada solicitud. Como sugiere en su pregunta, esto puede tener un efecto en el rendimiento.

Por lo general, uno almacena pequeñas cantidades de datos en la cookie, que se utilizan principalmente para identificar al usuario / sesión, por lo que se pueden recoger más datos de una base de datos u otro recurso local en el servidor web.