¿Cuál es la diferencia entre localStorage, sessionStorage, session y cookies?


¿Cuáles son los pros y los contras técnicos de localStorage, sessionStorage, session and cookies, y cuándo usaría una sobre la otra?

Author: Makoto, 2013-11-09

8 answers

Esta es una pregunta de alcance extremadamente amplio, y muchos de los pros/contras serán contextuales a la situación.

En todos los casos, estos mecanismos de almacenamiento serán específicos de un navegador individual en un equipo/dispositivo individual. Cualquier requisito para almacenar datos de forma continua en todas las sesiones tendrá que involucrar el lado del servidor de aplicaciones, lo más probable es que utilice una base de datos, pero posiblemente XML o un archivo de texto/CSV.

LocalStorage, sessionStorage y cookies son todos clientes soluciones de almacenamiento. Los datos de la sesión se guardan en el servidor donde permanecen bajo su control directo.

LocalStorage and sessionStorage

LocalStorage y sessionStorage son API relativamente nuevas (es decir, no todos los navegadores heredados las admitirán) y son casi idénticas (tanto en API como en capacidades) con la única excepción de persistence. sessionStorage (como su nombre indica) solo está disponible durante la sesión del navegador (y se elimina cuando la pestaña o ventana está cerrado) - no obstante, sobrevive a las recargas de página (source DOM Storage guide - Mozilla Developer Network).

Claramente, si los datos que está almacenando necesitan estar disponibles de forma continua, entonces localStorage es preferible a sessionStorage, aunque debe tener en cuenta que ambos pueden ser borrados por el usuario, por lo que no debe confiar en la existencia continua de datos en ninguno de los casos.

LocalStorage y sessionStorage son perfectos para conservar los datos no confidenciales necesarios dentro scripts de cliente entre páginas(por ejemplo: preferencias, puntuaciones en juegos). Los datos almacenados en localStorage y sessionStorage se pueden leer o cambiar fácilmente desde el cliente / navegador, por lo que no se debe confiar en el almacenamiento de datos confidenciales o relacionados con la seguridad dentro de las aplicaciones.

Cookies

Esto también es cierto para las cookies, estas pueden ser manipuladas trivialmente por el usuario, y los datos también se pueden leer en texto plano, por lo que si desea almacenar datos confidenciales entonces la sesión es realmente su única opción. Si no está utilizando SSL, la información de las cookies también puede ser interceptada en tránsito, especialmente en un wifi abierto.

En el lado positivo, las cookies pueden tener un grado de protección aplicado contra riesgos de seguridad como Cross-Site Scripting (XSS)/inyección de script al establecer una bandera solo HTTP, lo que significa que los navegadores modernos (compatibles) impedirán el acceso a las cookies y los valores de JavaScript (esto también evitará que su propio, legítimo, JavaScript acceder a ellos). Esto es especialmente importante con las cookies de autenticación, que se utilizan para almacenar un token que contiene los detalles del usuario que ha iniciado sesión: si tiene una copia de esa cookie, a todos los efectos se convierte en ese usuario en lo que respecta a la aplicación web, y tiene el mismo acceso a los datos y la funcionalidad que tiene el usuario.

Como las cookies se utilizan con fines de autenticación y persistencia de los datos del usuario, todas las cookies válidas para una página se envían desde el navegador al servidor para cada solicitud al mismo dominio: esto incluye la solicitud de página original, cualquier solicitud Ajax posterior, todas las imágenes, hojas de estilo, scripts y fuentes. Por este motivo, las cookies no deben utilizarse para almacenar grandes cantidades de información. El navegador también puede imponer límites en el tamaño de la información que se puede almacenar en las cookies. Por lo general, las cookies se utilizan para almacenar tokens de identificación para autenticación, sesión y seguimiento de publicidad. El los tokens no suelen ser información legible por humanos en sí mismos, sino identificadores cifrados vinculados a su aplicación o base de datos.

LocalStorage vs sessionStorage vs Cookies

En términos de capacidades, las cookies, sessionStorage y localStorage solo le permiten almacenar cadenas - es posible convertir implícitamente valores primitivos al configurar (estos tendrán que ser convertidos de nuevo para usarlos como su tipo después de la lectura), pero no Objetos o matrices (es posible JSON serializarlos para almacenarlos usando las API). El almacenamiento de sesiones generalmente le permitirá almacenar primitivas u objetos compatibles con el lenguaje/marco del lado del servidor.

Lado del cliente vs. Lado del servidor

Como HTTP es un protocolo sin estado, las aplicaciones web no tienen forma de identificar a un usuario de visitas anteriores al regresar al sitio web, los datos de sesión generalmente se basan en un token de cookie para identificar al usuario para visitas repetidas (aunque rara vez se pueden usar parámetros de URL para el mismo propósito). Los datos generalmente tendrán un tiempo de caducidad variable (renovado cada vez que el usuario visita), y dependiendo de su servidor/marco de datos se almacenarán en el proceso (lo que significa que los datos se perderán si el servidor web se bloquea o se reinicia) o externamente en un servidor de estado o base de datos. Esto también es necesario cuando se utiliza una granja web (más de un servidor para un sitio web determinado).

Como los datos de la sesión están completamente controlados por su aplicación (lado del servidor), es el mejor lugar para cualquier cosa sensible o segura en la naturaleza.

La desventaja obvia de los datos del lado del servidor es la escalabilidad: se requieren recursos del servidor para cada usuario durante la duración de la sesión, y todos los datos necesarios del lado del cliente deben enviarse con cada solicitud. Como el servidor no tiene forma de saber si un usuario navega a otro sitio o cierra su navegador, los datos de sesión deben caducar después de un tiempo determinado para evitar que todas las sesiones abandonadas tomen todos los recursos del servidor. Al utilizar los datos de la sesión por lo tanto, debe ser consciente de la posibilidad de que los datos hayan caducado y se hayan perdido, especialmente en páginas con formularios largos. También se perderá si el usuario elimina sus cookies o cambia de navegador / dispositivo.

Algunos frameworks/desarrolladores web usan entradas HTML ocultas para conservar datos de una página de un formulario a otra para evitar el vencimiento de la sesión.

LocalStorage, sessionStorage y las cookies están sujetas a reglas de "mismo origen", lo que significa que los navegadores deben impedir el acceso a datos excepto el dominio con el que se establece la información para comenzar.

Para obtener más información sobre las tecnologías de almacenamiento de clientes, consulte Sumérjase en Html 5.

 606
Author: pwdst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-07 14:47:39
  1. LocalStorage

    Pros:

    1. El almacenamiento web se puede ver de manera simplista como una mejora en las cookies, proporcionando una capacidad de almacenamiento mucho mayor. Si nos fijamos en el código fuente de Mozilla podemos ver que 5120KB (5MB que equivale a 2,5 millones de caracteres en Chrome) es el tamaño de almacenamiento predeterminado para un dominio completo. Esto le da mucho más espacio para trabajar que una típica cookie de 4KB.
    2. Los datos son no se envía de vuelta al servidor para cada solicitud HTTP (HTML, imágenes, JavaScript, CSS, etc.), lo que reduce la cantidad de tráfico entre el cliente y el servidor.
    3. Los datos almacenados en localStorage persisten hasta que se eliminen explícitamente. Los cambios realizados se guardan y están disponibles para todas las visitas actuales y futuras al sitio.

    Cons :

    1. Funciona en política del mismo origen. Por lo tanto, los datos almacenados solo estarán disponibles en el mismo origen.
  2. Cookies

    Ventajas:

    1. Comparado con otros, no hay nada AFAIK.

    Contras:

    1. El límite 4K es para toda la cookie, incluido el nombre, el valor, la fecha de caducidad, etc. Para admitir la mayoría de los navegadores, mantenga el nombre por debajo de 4000 bytes y el tamaño general de la cookie por debajo de 4093 bytes.
    2. Los datos se envían de vuelta al servidor para cada solicitud HTTP (HTML, imágenes, JavaScript, CSS, etc) - aumentar la cantidad de tráfico entre el cliente y el servidor.

      Normalmente, se permiten lo siguiente:

      • 300 cookies en total
      • 4096 bytes por cookie
      • 20 cookies por dominio
      • 81920 bytes por dominio(Dadas 20 cookies de tamaño máximo 4096 = 81920 bytes.)
  3. SessionStorage

    Ventajas:

    1. Es similar a localStorage.
    2. Los datos no son persistentes, es decir, los datos solo están disponibles por ventana (o pestaña en navegadores como Chrome y Firefox). Los datos solo están disponibles durante la sesión de página. Los cambios realizados se guardan y están disponibles para la página actual, así como para futuras visitas al sitio en la misma ventana. Una vez que se cierra la ventana, el almacenamiento se elimina.

    Contras:

    1. Los datos solo están disponibles dentro de la ventana/pestaña en la que se establecieron.
    2. Como localStorage, tt funciona en política del mismo origen. Por lo tanto, los datos almacenados solo estarán disponibles en el mismo origen.
 40
Author: softvar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-19 12:13:54

Estas son propiedades del objeto 'window' en JavaScript, al igual que document es una de las propiedades del objeto window que contiene objetos DOM.

La propiedad de almacenamiento de sesión mantiene un área de almacenamiento separada para cada origen dado que está disponible durante la duración de la sesión de página, es decir, siempre y cuando el navegador esté abierto, incluidas las recargas y restauraciones de la página.

El almacenamiento local hace lo mismo, pero persiste incluso cuando el navegador está cerrado y reabierto.

Puede establecer y recuperar los datos almacenados de la siguiente manera:

sessionStorage.setItem('key', 'value');

var data = sessionStorage.getItem('key');

Similar para localStorage.

 21
Author: Prashant_M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-28 18:55:01

OK, localStorage como se llama su almacenamiento local para sus navegadores, puede guardar hasta 10MB, sessionStorage hace lo mismo, pero como su nombre dice, se basa en la sesión y se eliminará después de cerrar su navegador, también puede guardar menos que localStorage, como hasta 5MB, pero Las cookies son datos muy pequeños que almacenan en su navegador, que pueden ahorrar 4KB y se puede acceder a través del servidor o del navegador tanto...

También creé el imagen de abajo para mostrar las diferencias de un vistazo:

localStorage, sessionStorage y Cookie

 18
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-10 01:23:27

La API de almacenamiento web proporciona mecanismos mediante los cuales los navegadores pueden almacenar de forma segura pares clave/valor, de una manera mucho más intuitiva que el uso de cookies. La API de almacenamiento web extiende el objeto Window con dos propiedades nuevas: Window.sessionStorage y Window.localStorage. - invocar uno de estos creará una instancia del objeto de almacenamiento, a través del cual se pueden establecer, recuperar y eliminar elementos de datos. Se utiliza un objeto de almacenamiento diferente para sessionStorage y localStorage para cada origen (dominio).

Los objetos de almacenamiento son simples almacenes clave-valor, similares a los objetos, pero permanecen intactos a través de las cargas de página.

localStorage.colorSetting = '#a4509b';
localStorage['colorSetting'] = '#a4509b';
localStorage.setItem('colorSetting', '#a4509b');

Las claves y los valores son siempre cadenas. Para almacenar cualquier tipo convert it to String y luego guárdalo. Siempre se recomienda utilizar Storage interface métodos.

var testObject = { 'one': 1, 'two': 2, 'three': 3 };
// Put the object into storage
localStorage.setItem('testObject', JSON.stringify(testObject));
// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');
console.log('Converting String to Object: ', JSON.parse(retrievedObject));

Los dos mecanismos dentro del Almacenamiento Web son los siguientes: sigue:

  • Cursos de formación mantiene un área de almacenamiento separada para cada origen dadoPolítica del mismo origen está disponible durante la duración de la sesión de la página (siempre que el navegador esté abierto, incluidas las recargas y restauraciones de la página).
  • localStorage hace lo mismo, pero persiste incluso cuando el navegador se cierra y vuelve a abrir.

Almacenamiento " almacenamiento Local escribe los datos en el disco, mientras que el almacenamiento de sesiones escribe los datos solo en la memoria. Todos los datos escritos en el almacenamiento de la sesión se purgan cuando se cierra la aplicación.

El almacenamiento máximo disponible es diferente por navegador, pero la mayoría de los navegadores han implementado al menos el límite máximo de almacenamiento recomendado por el w3c de 5MB.

+----------------+--------+---------+-----------+--------+
|                | Chrome | Firefox | Safari    |  IE    |
+----------------+--------+---------+-----------+--------+
| LocalStorage   | 10MB   | 10MB    | 5MB       | 10MB   |
+----------------+--------+---------+-----------+--------+
| SessionStorage | 10MB   | 10MB    | Unlimited | 10MB   |
+----------------+--------+---------+-----------+--------+

Siempre captura errores de seguridad de almacenamiento local y de rebasamiento de cuota

  • QuotaExceededError: Cuando los límites de almacenamiento exceden esta función window.sessionStorage.setItem(key, value);, lanza una excepción DOMException "QuotaExceededError" si el nuevo valor no se pudo establecer. (La configuración podría fallar si, por ejemplo, el usuario ha deshabilitado el almacenamiento para el sitio, o si se ha excedido la cuota.)

    DOMException. QUOTA_EXCEEDED_ERR es 22, ejemplo fiddle.

  • SecurityError : Uncaught SecurityError: Access to 'localStorage' is denied for this document.

    CHROME:-Privacy and security « Content settings « Cookies « Block third-party cookies.
    

StorageEvent " El evento de almacenamiento se activa en el objeto Ventana de un documento cuando cambia un área de almacenamiento. Cuando un agente de usuario va a enviar una notificación de almacenamiento para un Documento, el agente de usuario debe poner en cola una tarea para activar un evento llamado almacenamiento en el objeto Ventana del objeto del documento, utilizando StorageEvent.

Nota: Para un ejemplo del mundo real, vea Web Storage Demo. echa un vistazo al código fuente

Escuche el evento de almacenamiento en dom / Window para capturar los cambios en el almacén. fiddle .


Cookies (cookie web, cookie del navegador) Las cookies son datos, almacenados en pequeños archivos de texto como pares nombre-valor, en su computadora.

Acceso JavaScript usando el documento .cookie

También se pueden crear nuevas cookies a través de JavaScript utilizando el Documento.cookie, y si el indicador HttpOnly no está establecido, se puede acceder a las cookies existentes desde JavaScript como bien.

document.cookie = "yummy_cookie=choco"; 
document.cookie = "tasty_cookie=strawberry"; 
console.log(document.cookie); 
// logs "yummy_cookie=choco; tasty_cookie=strawberry"

Cookies seguras y HttpOnlyMecanismo de Administración de Estado HTTP

Las cookies se utilizan a menudo en aplicaciones web para identificar a un usuario y su sesión autenticada

Al recibir una solicitud HTTP, un servidor puede enviar un encabezado Set-Cookie con la respuesta. La cookie generalmente es almacenada por el navegador, y luego la cookie se envía con solicitudes realizadas al mismo servidor dentro de un encabezado HTTP de Cookie.

Set-Cookie: <cookie-name>=<cookie-value> 
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>

Las cookies de sesión se eliminarán cuando se apague el cliente. No especifican las directivas Expires o Max-Age.

Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/

Las cookies permanentes expiran en una fecha específica (Caduca) o después de un período de tiempo específico (Edad máxima).

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

El encabezado de solicitud HTTP Cookie contiene cookies HTTP almacenadas previamente enviadas por el servidor con el encabezado Set-Cookie. Las cookies de solo HTTP no son accesibles a través de JavaScript a través de documento.cookie property, las API de XMLHttpRequest y Request para mitigar los ataques contra cross-site scripting (XSS).

Las cookies se utilizan principalmente para tres propósitos:

  • Administración de sesiones " Inicios de sesión, carritos de compras, puntuaciones de juegos o cualquier otra cosa que el servidor deba recordar
  • Personalización " Preferencias de usuario, temas y otros ajustes
  • Seguimiento (Registro y análisis del comportamiento del usuario) " Las cookies tienen un dominio asociado a ellos. Si este dominio es el mismo que el dominio de la página en la que se encuentra, se dice que las cookies son una cookie de origen. Si el dominio es diferente, se dice que es una cookie de terceros. Mientras que las cookies de origen se envían solo al servidor que las configura, una página web puede contener imágenes u otros componentes almacenados en servidores en otros dominios (como banners publicitarios). Las cookies que se envían a través de estos componentes de terceros se denominan cookies de terceros y se utilizan principalmente para publicidad y seguimiento a través de la web.

Las cookies se inventaron para resolver el problema"cómo recordar información sobre el usuario":

  • Cuando un usuario visita una página web, su nombre puede ser almacenado en una cookie.
  • La próxima vez que el usuario visite la página, se agregarán cookies pertenecientes a la página a la solicitud. De esta manera el servidor obtiene los datos necesarios para "recordar" información sobre los usuarios.

GitHubGist Example


As resumen,

  • localStorage persiste en diferentes pestañas o ventanas, e incluso si cerramos el navegador, de acuerdo con la política de seguridad del dominio y las opciones del usuario sobre el límite de cuota.
  • El objeto sessionStorage no persiste si cerramos la pestaña (contexto de navegación de nivel superior) ya que no existe si navegamos a través de otra pestaña o ventana.
  • El almacenamiento web (sesión, local) nos permite guardar una gran cantidad de pares clave/valor y mucho texto, algo imposible de hacer a través de cookie.
  • Las cookies que se utilizan para acciones sensibles solo deben tener una vida útil corta.
  • Cookies utilizadas principalmente para publicidad y seguimiento en la web. Consulte, por ejemplo, los tipos de cookies utilizados por Google.
  • Las cookies se envían con cada solicitud, por lo que pueden empeorar el rendimiento (especialmente para las conexiones de datos móviles). Las API modernas para el almacenamiento de clientes son la API de almacenamiento web (localStorage y sessionStorage) e IndexedDB.
 2
Author: Yash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-16 14:27:19

Almacenamiento local: Mantiene almacenar los datos de información del usuario sin fecha de caducidad estos datos no se eliminarán cuando el usuario cierre las ventanas del navegador estará disponible para el día, la semana, el mes y el año.

En el almacenamiento local puede almacenar 5-10mb datos sin conexión.

//Set the value in a local storage object
localStorage.setItem('name', myName);

//Get the value from storage object
localStorage.getItem('name');

//Delete the value from local storage object
localStorage.removeItem(name);//Delete specifice obeject from local storege
localStorage.clear();//Delete all from local storege

Almacenamiento de sesión: Es igual que la fecha de almacenamiento local, excepto que eliminará todas las ventanas cuando las ventanas del navegador se cierren por un usuario web.

En la sesión de almacenamiento puede almacenar hasta 5 mb datos

//set the value to a object in session storege
sessionStorage.myNameInSession = "Krishna";

Session: Una sesión es una variable global almacenada en el servidor. A cada sesión se le asigna un id único que se utiliza para recuperar los valores almacenados.

Cookies: Las cookies son datos, almacenados en pequeños archivos de texto como pares nombre-valor, en su ordenador. Una vez que se ha establecido una cookie, todas las solicitudes de página que siguen devuelven el nombre y el valor de la cookie.

 2
Author: Srikrushna Pal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-29 20:03:24

El almacenamiento web HTML proporciona dos objetos para almacenar datos en el cliente:

window.localStorage - stores data with no expiration date 
window.sessionStorage - stores data for one session (data is lost when 
the browser tab is closed)

LocalStorage:

El almacenamiento web se puede ver de manera simplista como una mejora en las cookies, proporcionando una capacidad de almacenamiento mucho mayor. El tamaño disponible es de 5MB, que es considerablemente más espacio para trabajar que una cookie típica de 4KB.

Los datos no se envían de vuelta al servidor para cada solicitud HTTP (HTML, imágenes, JavaScript, CSS, etc.), lo que reduce la cantidad de tráfico entre cliente y servidor.

Los datos almacenados en localStorage persisten hasta que se eliminen explícitamente. Los cambios realizados se guardan y están disponibles para todas las visitas actuales y futuras al sitio. Funciona en la política del mismo origen. Por lo tanto, los datos almacenados solo estarán disponibles en el mismo origen.

El objeto localStorage:

El objeto localStorage almacena los datos sin fecha de caducidad. Los datos no se eliminarán cuando se cierre el navegador y estarán disponibles al día, semana o año.

// Store
 localStorage.setItem("lastname", "Smith");

// Retrieve

localStorage.getItem("lastname");

//Remove

localStorage.removeItem("lastname");

Cookies:

Podemos establecer el tiempo de caducidad para cada cookie El límite de 4K es para toda la cookie, incluido el nombre, el valor, la fecha de caducidad, etc. Para admitir la mayoría de los navegadores, mantenga el nombre por debajo de 4000 bytes y el tamaño general de la cookie por debajo de 4093 bytes.

Los datos se envían de vuelta al servidor para cada solicitud HTTP (HTML, imágenes, JavaScript, CSS, etc.), lo que aumenta la cantidad de tráfico entre el cliente y servidor.

SessionStorage:

Es similar a localStorage. Los cambios solo están disponibles por ventana (o pestaña en navegadores como Chrome y Firefox). Los cambios realizados se guardan y están disponibles para la página actual, así como para futuras visitas al sitio en la misma ventana. Una vez cerrada la ventana, se elimina el almacenamiento

Los datos solo están disponibles dentro de la ventana/pestaña en la que se establecieron.

Los datos no son persistentes, es decir, se perderán una vez que la ventana / pestaña está cerrado. Al igual que localStorage, funciona en la política del mismo origen. Por lo tanto, los datos almacenados solo estarán disponibles en el mismo origen.

 1
Author: Neha Sinha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-13 07:11:24

Almacenamiento local para todas las sesiones, almacenamiento de sesiones para una sesión sesión Los datos se envían de vuelta al servidor para cada solicitud HTTP. también puede real este artículo a ahora sobre webstorage

 0
Author: Pankaj Bisht,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-22 09:22:35