Solución:
No más de 50 cookies por dominio, con un máximo de 4 KB por cookie (o incluso 4 KB en total, consulte la respuesta de Iain). En IE 6 solía haber 20 cookies por dominio.
Por lo general, se recomienda conservar el estado en el servidor y utilizar 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, existen opciones. Utilice las API de almacenamiento surtidas 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 (muy específico del navegador, consulte su navegador para obtener más detalles).
Opciones de almacenamiento obsoletas:
- Almacenamiento persistente Flash 8: cualquier navegador con Flash 8+. 100 KB, más con permiso de usuario. En desuso porque Flash 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.
Entonces, generalmente para el almacenamiento del lado del cliente, depende del caso de uso:
- Para el seguimiento de la identificación de la sesión o para unos pocos KB, utilice cookies.
- Hasta 2 MB, localstorage ofrece una solución en todos los navegadores habituales.
- 2 MB y más, use IndexedDB (busque una buena biblioteca contenedora).
Límites de tamaño de las cookies
Si desea admitir la mayoría de los navegadores, no exceda 50 cookies por dominio, y 4093 bytes por dominio. Es decir, el tamaño de todas las cookies no debe exceder los 4093 bytes.
Pensamientos de rendimiento
Las cookies se envían en cada solicitud de un dominio, esto incluye imágenes. Por el bien de los argumentos, digamos que tiene 30 recursos en su sitio web y 4093 bytes de cookies. Eso significa que el usuario está cargando 122 Kb de datos. Entonces, si tengo una conexión de carga de 1 Mbit, eso tomará al menos 1 segundo.
Si desea ver la página de prueba de cookies que creé, o leer más sobre ella, consulte Límites de cookies del navegador.
En primer lugar, le sugiero que no se preocupe por este problema. Hay AMPLIO espacio para serializar toneladas de identificadores.
En segundo lugar, no lo almacena web-server
pero por web-domain
– p.ej, www.google.com
y no los cientos de servidores físicos diferentes que sirven 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
Para lo que no desea utilizar el encabezado de la cookie es 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 una interfaz de correo electrónico. En su lugar, enviaría al cliente una cookie que representa su identidad + sesión: almacena 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 de, digamos, 4 de estos. Los datos de las cookies (como un número entero) tienden a estar codificados en base64, lo que aumenta el número de bytes.
Rendimiento
Su navegador envía una gran cantidad de encabezados a un servidor web. La cookie es solo otros 100-1000 bytes (en su mayoría más cerca de 100). En ambos extremos, solo se necesita una fracción de tiempo para 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.