<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Almacenamiento_local_en_JavaScript</id>
	<title>Almacenamiento local en JavaScript - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Almacenamiento_local_en_JavaScript"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Almacenamiento_local_en_JavaScript&amp;action=history"/>
	<updated>2026-10-22T00:51:33Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Almacenamiento_local_en_JavaScript&amp;diff=69332&amp;oldid=prev</id>
		<title>Vieites: /* sessionStorage */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Almacenamiento_local_en_JavaScript&amp;diff=69332&amp;oldid=prev"/>
		<updated>2021-01-24T23:28:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;sessionStorage&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;...&lt;br /&gt;
&lt;br /&gt;
== Cookies ==&lt;br /&gt;
Las cookies, de nombre más exacto &amp;#039;&amp;#039;&amp;#039;HTTP cookies&amp;#039;&amp;#039;&amp;#039;, es una tecnología que en su día inventó el navegador Netscape, actualmente definida en el estándar [https://tools.ietf.org/html/rfc6265 RFC 6265], y que consiste básicamente en información enviada o recibida en las cabeceras HTTP y que queda almacenada localmente en el lado del cliente durante un tiempo determinado. En otras palabras, es información que queda almacenada en el dispositivo del usuario y que se envía hacia y desde el servidor web en las cabeceras HTTP.&lt;br /&gt;
&lt;br /&gt;
Cuando un usuario solicita una página web, el servidor envía el documento, cierra la conexión y se olvida del usuario. Si el mismo usuario vuelve a solicitar la misma u otra página al servidor, será tratado como si fuera la primera solicitud que realiza. Esta situación puede suponer un problema en muchas situaciones y las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; son una técnica que permite solucionarlo.&lt;br /&gt;
&lt;br /&gt;
Con las cookies, el servidor puede enviar información al usuario en las cabeceras HTTP de respuesta y esta información queda almacenada en el dispositivo del usuario. En la siguiente solicitud que realice el usuario la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; es enviada de vuelta al servidor en las cabeceras HTTP de solicitud. En el servidor podemos leer esta información y así &amp;quot;recordar&amp;quot; al usuario e información asociada a él.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Recuerda:&amp;#039;&amp;#039;&amp;#039; Para los ejemplos que aquí aparecen. Si ejecutas un archivo .html &amp;#039;en local&amp;#039; (no desde un servidor), las cookies no te funcionarán en el Chrome, utiliza el Firefox para probar los códigos.&lt;br /&gt;
&lt;br /&gt;
=== Crear cookies ===&lt;br /&gt;
Una &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; es un &amp;#039;&amp;#039;string&amp;#039;&amp;#039; (cadena de texto) que contiene parejas &amp;#039;&amp;#039;&amp;#039;parametro=valor&amp;#039;&amp;#039;&amp;#039; separadas por &amp;#039;&amp;#039;&amp;#039;;&amp;#039;&amp;#039;&amp;#039; de la siguiente forma:&lt;br /&gt;
: &amp;#039;&amp;#039;&amp;#039;&amp;lt;nombre&amp;gt;=&amp;lt;valor&amp;gt;; expires=&amp;lt;fecha&amp;gt;; max-age=&amp;lt;segundos&amp;gt;; path=&amp;lt;ruta&amp;gt;; domain=&amp;lt;dominio&amp;gt;; secure; httponly;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Los parámetros son:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;nombre&amp;gt;=&amp;lt;valor&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Requerido. &amp;#039;&amp;#039;&amp;#039;&amp;lt;nombre&amp;gt;&amp;#039;&amp;#039;&amp;#039; es el nombre (&amp;#039;&amp;#039;key&amp;#039;&amp;#039;) que identifica la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; y &amp;#039;&amp;#039;&amp;#039;&amp;lt;valor&amp;gt;&amp;#039;&amp;#039;&amp;#039; es su valor. A diferencia de las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; en PHP, en JavaScript se puede crear una &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; con un valor vacío (&amp;#039;&amp;#039;&amp;#039;&amp;lt;nombre&amp;gt;=&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;expires=&amp;lt;fecha&amp;gt;&amp;#039;&amp;#039;&amp;#039; y &amp;#039;&amp;#039;&amp;#039;max-age=&amp;lt;segundos&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Opcional. Ambos parámetros especifican el tiempo de validez de la cookie. expires establece una fecha (ha de estar en formato UTC) mientras que max-age establece una duración máxima en segundos. max-age toma preferencia sobre expires. Si no se especifica ninguno de los dos se creará una session cookie. Si es max-age=0 o expires=fecha-pasada la cookie se elimina.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;path=&amp;lt;ruta&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Opcional. Establece la ruta para la cuál la cookie es válida. Si no se especifica ningún valor, la cookie será válida para la ruta la página actual.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;domain=&amp;lt;dominio&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Opcional. Dentro del dominio actual, subdominio para el que la cookie es válida. El valor predeterminado es el subdominio actual. Establecer domain=.miweb.com para una cookie que sea válida para cualqueir subdominio (nota el punto delante del nombre del dominio). Por motivos de seguridad, los navegadores no permiten crear cookies para dominios diferentes al que crea la cookie (same-origin policy).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;secure&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Opcional. Parámetro sin valor. Si está presente la cookie sólo es válida para conexiones encriptadas (por ejemplo mediante protocolo HTTPS).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HttpOnly&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Opcional. Parámetro no disponible en JavaScript ya que crea cookies válidas sólo para protocolo HTTP/HTTPS y no para otras APIs, incluyendo JavaScript.&lt;br /&gt;
&lt;br /&gt;
[https://developer.mozilla.org/es/docs/DOM/document.cookie Aquí puedes ver el resto de parámetros.]&lt;br /&gt;
&lt;br /&gt;
=== La propiedad &amp;#039;&amp;#039;document.cookie&amp;#039;&amp;#039; ===&lt;br /&gt;
La propiedad &amp;#039;&amp;#039;document.cookie&amp;#039;&amp;#039; es todo lo que se necesita para trabajar con &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; del lado del cliente con JavaScript. A través de ella podemos crear, leer, modificar y eliminar &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;. Veamos cada uno de los casos.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Crear &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Establecer una &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; en JavaScript es tan fácil como crear el &amp;#039;&amp;#039;string&amp;#039;&amp;#039; que define la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; y asignarlo a &amp;#039;&amp;#039;document.cookie&amp;#039;&amp;#039;. Por ejemplo:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.cookie = &amp;quot;nombrecookie=valorcookie; max-age=3600; path=/&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Si queremos crear varias &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;, tenemos que hacer este paso una vez para cada una. Por ejemplo, con el siguiente código se crearían las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;comida_favorita&amp;#039;&amp;#039;&amp;#039; y &amp;#039;&amp;#039;&amp;#039;color_favorito&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.cookie = &amp;quot;comida_favorita=arroz; max-age=3600; path=/&amp;quot;;&lt;br /&gt;
document.cookie = &amp;quot;color_favorito=amarillo&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Este comportamiento se debe a que &amp;#039;&amp;#039;&amp;#039;document.cookie&amp;#039;&amp;#039;&amp;#039; no es un dato con un valor (&amp;#039;&amp;#039;data property&amp;#039;&amp;#039;), sino una propiedad de acceso con métodos &amp;#039;&amp;#039;&amp;#039;set&amp;#039;&amp;#039;&amp;#039; y &amp;#039;&amp;#039;&amp;#039;get&amp;#039;&amp;#039;&amp;#039; nativos (&amp;#039;&amp;#039;accessor property&amp;#039;&amp;#039;). Cada vez que se le asigna una nueva &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039;, no se sobrescriben las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; anteriores sino que la nueva se añade a la colección de &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; del documento.&lt;br /&gt;
&lt;br /&gt;
: Recuerda que las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; se envían en las cabeceras HTTP y, por tanto, deben estar correctamente codificadas. Puedes utilizar &amp;#039;&amp;#039;&amp;#039;[https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/encodeURIComponent encodeURIComponent()]&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var testvalue = &amp;quot;Hola mundo!&amp;quot;;&lt;br /&gt;
document.cookie = &amp;quot;testcookie=&amp;quot; + encodeURIComponent( testvalue );&lt;br /&gt;
 //testcookie=Hola%20mundo!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Si vas a utilizar el parámetro &amp;#039;&amp;#039;&amp;#039;expires&amp;#039;&amp;#039;&amp;#039;, recuerda que ha de ser una fecha en formato &amp;#039;&amp;#039;&amp;#039;UTC&amp;#039;&amp;#039;&amp;#039;. Te puede ser de ayuda el método [https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Date/toUTCString Date.toUTCString()]. Por ejemplo, una &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; con caducidad para el 1 de Febrero del año 2068 a las 11:20:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var expiresdate = new Date(2068, 1, 02, 11, 20);&lt;br /&gt;
var cookievalue = &amp;quot;Hola Mundo!&amp;quot;;&lt;br /&gt;
document.cookie = &amp;quot;testcookie=&amp;quot; + encodeURIComponent( cookievalue ) + &amp;quot;; expires=&amp;quot; + expiresdate.toUTCString();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Un modo alternativo de indicar la duración de la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; es utilizando el parámetro &amp;#039;&amp;#039;&amp;#039;max-age=duración-máxima-en-segundos&amp;#039;&amp;#039;&amp;#039;, por ejemplo: 60*60*24*365 para un año.&lt;br /&gt;
&lt;br /&gt;
: Por último, en relación a la duración de las &amp;#039;&amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;&amp;#039; antes de que el navegador las borre, debes saber que si no se específica fecha de caducidad o no se especifica su duración la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; será válida sólo para la sesión actual.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Modificar &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Como vimos ahora, cada vez que se asigna una &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; a &amp;#039;&amp;#039;document.cookie&amp;#039;&amp;#039;, esta es añadida a la colección de &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; del documento. Esto es verdad excepto si la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; asignada tiene un identificador que ya existe. En este caso se modifica la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; existente en lugar de añadir una más.&lt;br /&gt;
&lt;br /&gt;
: Por ejemplo, podemos crear la siguiente &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; con identificador nombre y valor Miguel:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.cookie = &amp;quot;nombre=Miguel&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Si queremos modificar el valor, por ejemplo cambiarlo por Juan:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.cookie = &amp;quot;nombre=Juan&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Es importante tener en cuenta que si una &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; se crea para un dominio o para un &amp;#039;&amp;#039;path&amp;#039;&amp;#039; determinado y se quiere modificar, el dominio y el &amp;#039;&amp;#039;path&amp;#039;&amp;#039; han de coincidir. De lo contrario se crearán dos &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; diferentes válidas para cada &amp;#039;&amp;#039;path&amp;#039;&amp;#039; y dominio. Por ejemplo, imaginemos que estamos en «miweb.com/blog» (el valor predeterminado del &amp;#039;&amp;#039;path&amp;#039;&amp;#039; es en este caso &amp;#039;&amp;#039;&amp;#039;/blog&amp;#039;&amp;#039;&amp;#039;):&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Supongamos que estamos en &amp;quot;miweb.com/blog&amp;quot;&lt;br /&gt;
// y creamos las siguientes cookies&lt;br /&gt;
&lt;br /&gt;
// Creamos la cookie para el path &amp;quot;/&amp;quot;&lt;br /&gt;
document.cookie = &amp;quot;nombre=Miguel; path=/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Con la siguiente linea se crea una nueva cookie para el path &amp;quot;/blog&amp;quot; (valor por defecto)&lt;br /&gt;
// pero no se modifica la cookie &amp;quot;nombre&amp;quot; anterior porque era para un path diferente&lt;br /&gt;
document.cookie = &amp;quot;nombre=Juan&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Con la siguiente línea SI se modifica la cookie &amp;quot;nombre&amp;quot; del path &amp;quot;/&amp;quot; correctamente&lt;br /&gt;
document.cookie = &amp;quot;nombre=Juan; path=/&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Eliminar &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Para eliminar una &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; desde JavaScript se debe asignar una fecha de caducidad (&amp;#039;&amp;#039;&amp;#039;expires&amp;#039;&amp;#039;&amp;#039;) pasada o un &amp;#039;&amp;#039;&amp;#039;max-age&amp;#039;&amp;#039;&amp;#039; igual a cero. En ambos casos da igual el valor que se le asigne a la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; porque se eliminará pero ha de darse el nombre de la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; aunque sea sin valor.&lt;br /&gt;
&lt;br /&gt;
: Por ejemplo, creamos la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; con el identificador &amp;#039;&amp;#039;&amp;#039;nombre&amp;#039;&amp;#039;&amp;#039; y valor &amp;#039;&amp;#039;&amp;#039;Miguel&amp;#039;&amp;#039;&amp;#039; igual que antes:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.cookie = &amp;quot;nombre=Miguel&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Si queremos eliminarla:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.cookie = &amp;quot;nombre=; expires=Thu, 01 Jan 1970 00:00:00 UTC&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// O con max-age&lt;br /&gt;
document.cookie = &amp;quot;nombre=; max-age=0&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Al igual que ocurría con la modificación de &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;, para la eliminación el &amp;#039;&amp;#039;&amp;#039;path&amp;#039;&amp;#039;&amp;#039; y el &amp;#039;&amp;#039;&amp;#039;domain&amp;#039;&amp;#039;&amp;#039; también tienen que coincidir:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Se crean dos cookies con el mismo identificador&lt;br /&gt;
// para dos paths diferentes&lt;br /&gt;
document.cookie = &amp;quot;nombre=Miguel; path=/noticias&amp;quot;;&lt;br /&gt;
document.cookie = &amp;quot;nombre=Juan; path=/blog&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Solo se elimina la cookie del path /noticias&lt;br /&gt;
document.cookie = &amp;quot;nombre=; max-age=0; path=/noticias&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Leer y obtener el valor de las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Puede que obtener el valor sea el paso más tedioso de trabajar con &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; en JavaScript, y es que no hay un método de lectura directo para cada &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; individual. Sólo se puede obtener un &amp;#039;&amp;#039;string&amp;#039;&amp;#039; con todas las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; válidas para el documento y manipular el &amp;#039;&amp;#039;string&amp;#039;&amp;#039; hasta encontrar el nombre y valor de la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; que queremos.&lt;br /&gt;
&lt;br /&gt;
: El &amp;#039;&amp;#039;string&amp;#039;&amp;#039; con todas las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; se obtiene del siguiente modo:&lt;br /&gt;
: &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var lasCookies = document.cookie;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Y tiene el siguiente formato:&lt;br /&gt;
: &amp;#039;&amp;#039;&amp;#039;&amp;quot;cookie1=valor1;cookie2=valor2;cookie3=valor3[;...]&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
: Fijarse en que:&lt;br /&gt;
:* El &amp;#039;&amp;#039;string&amp;#039;&amp;#039; sólo contiene pares de nombre de la &amp;#039;&amp;#039;cookie&amp;#039;&amp;#039; y su valor. No se puede acceder a otros parámetros a través de &amp;#039;&amp;#039;document.cookie&amp;#039;&amp;#039;.&lt;br /&gt;
:* Sólo se obtienen las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; válidas para el documento actual. Esto implica que &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; para otros &amp;#039;&amp;#039;paths&amp;#039;&amp;#039;, dominios o &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; caducadas no se pueden leer. Aunque en una página puedan crearse &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; para otros subdominios y &amp;#039;&amp;#039;paths&amp;#039;&amp;#039;, sólo se pueden leer las que san válidas para el subdominio y &amp;#039;&amp;#039;path&amp;#039;&amp;#039; actual.&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo sencillo de creación y lectura de &amp;#039;&amp;#039;Cookies&amp;#039;&amp;#039; ===&lt;br /&gt;
En este ejemplo tenemos un botón y una etiqueta. Se crea una cookie que guarda las veces que pulsamos el botón en cada sesión del navegador. El numero de pulsaciones se mostrará en un elemento &amp;#039;&amp;#039;&amp;#039;label&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HTML&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;#039;html&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Prueba cookie&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;boton&amp;quot; value=&amp;quot;Pulsa&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;label id=&amp;quot;labelContador&amp;quot;&amp;gt;0&amp;lt;/label&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Iniciamos la cookie para esta sesión&lt;br /&gt;
document.cookie  = &amp;quot;pulsados=0; SameSite=None; Secure;&amp;quot;;&lt;br /&gt;
 //console.log(document.cookie);&lt;br /&gt;
&lt;br /&gt;
function alertCookie() {&lt;br /&gt;
    //Creamos un diccionario con el contenido de la Cookie&lt;br /&gt;
    let dCookie = {};&lt;br /&gt;
    const laCookie = document.cookie; // La cookie en formato string &lt;br /&gt;
    const aCookie = laCookie.split(&amp;quot;;&amp;quot;); // Array de pares clave=valor existentes en la cookie&lt;br /&gt;
    console.log(aCookie);&lt;br /&gt;
	for (let i = 0; i &amp;lt; aCookie.length; i++) { // Llenamos el diccionario con los pares clave:valor&lt;br /&gt;
        dCookie[aCookie[i].split(&amp;#039;=&amp;#039;)[0].trim()] = aCookie[i].split(&amp;#039;=&amp;#039;)[1].trim(); &lt;br /&gt;
    }&lt;br /&gt;
     //console.log(&amp;#039;El diccionario: &amp;#039;);&lt;br /&gt;
     //console.log(dCookie);&lt;br /&gt;
    &lt;br /&gt;
    //Cambiamos contenido de la Cookie&lt;br /&gt;
    dCookie[&amp;#039;pulsados&amp;#039;] = parseInt(dCookie[&amp;#039;pulsados&amp;#039;]) + 1;&lt;br /&gt;
    textoCookie = &amp;#039;pulsados=&amp;#039; + dCookie[&amp;#039;pulsados&amp;#039;] + &amp;#039;; SameSite=None; Secure;&amp;#039;;&lt;br /&gt;
    document.cookie = textoCookie;&lt;br /&gt;
     // console.log(document.cookie);&lt;br /&gt;
    &lt;br /&gt;
    //Mostramos en la &amp;#039;label&amp;#039; el número de veces que se pulsó el botón al recargar la web&lt;br /&gt;
    document.getElementById(&amp;#039;labelContador&amp;#039;).innerText = dCookie[&amp;#039;pulsados&amp;#039;];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Añadimos un escuchador al evento click para el botón de la web&lt;br /&gt;
document.getElementById(&amp;#039;boton&amp;#039;).addEventListener(&amp;#039;click&amp;#039;,alertCookie,false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Enlaces externos interesantes sobre &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039; ===&lt;br /&gt;
* [https://developer.mozilla.org/es/docs/DOM/document.cookie Cookies en developer Mozilla]&lt;br /&gt;
* [https://cybmeta.com/que-son-las-cookies-y-como-funcionan Introducción a las cookies]&lt;br /&gt;
* [https://javascript.info/cookie Funciones de manejo de cookies]&lt;br /&gt;
* [https://www.aepd.es/sites/default/files/2020-07/guia-cookies.pdf Guía sobre uso de cookies AEPD]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LocalStorage ==&lt;br /&gt;
El mecanismo de almacenamiento DOM es el medio a través del cual pares de clave/valor pueden ser almacenadas de forma segura para ser recuperadas y utilizadas más adelante. La meta de este añadido es suministrar un método exhaustivo a través del cual puedan construirse aplicaciones interactivas (incluyendo características avanzadas tales como ser capaces de trabajar &amp;quot;sin conexión&amp;quot; durante largos períodos de tiempo).&lt;br /&gt;
&lt;br /&gt;
El almacenamiento DOM está diseñado para facilitar una forma amplia, segura y sencilla para almacenar información alternativa a las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[https://developer.mozilla.org/es/docs/Web/API/Window/localStorage LocalStorage]&amp;#039;&amp;#039;&amp;#039; y &amp;#039;&amp;#039;&amp;#039;[https://developer.mozilla.org/es/docs/Web/API/Window/sessionStorage sessionStorage]&amp;#039;&amp;#039;&amp;#039; son propiedades de HTML5, que permiten almacenar datos en nuestro navegador web. De manera muy similar a como lo hacen las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Local Storage&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Guarda información que permanecerá almacenada por tiempo indefinido; sin importar que el navegador se cierre.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Session Storage&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: Almacena los datos de una sesión y éstos se eliminan cuando el navegador se cierra.&lt;br /&gt;
&lt;br /&gt;
Las características de Local Storage y Session Storage son:&lt;br /&gt;
* Permiten almacenar entre 5MB y 10MB de información; incluyendo texto y multimedia.&lt;br /&gt;
* La información está almacenada en la computadora del cliente y NO es enviada en cada petición del servidor, a diferencia de las &amp;#039;&amp;#039;cookies&amp;#039;&amp;#039;.&lt;br /&gt;
* Utilizan un número mínimo de peticiones al servidor para reducir el tráfico de la red.&lt;br /&gt;
* Previenen pérdidas de información cuando se desconecta de la red.&lt;br /&gt;
* La información es guardada por domino web (incluye todas las páginas del dominio).&lt;br /&gt;
&lt;br /&gt;
Los datos de almacenamiento DOM se eliminan junto con la memoria caché sin conexión cuando se hace clic en el botón Eliminar.&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo LocalStorage ===&lt;br /&gt;
En el siguiente ejemplo se muestra como se pueden almacenar en local dos &amp;#039;&amp;#039;&amp;#039;clave=valor&amp;#039;&amp;#039;&amp;#039; y luego leerlas. Primero ingresamos los datos y los guardamos. Después, cerraremos y abriremos nuevamente la pestaña o ventana nuestro navegador, daremos &amp;#039;&amp;#039;clic&amp;#039;&amp;#039; en &amp;quot;cargar elementos&amp;quot; y nos daremos cuenta de que los datos que almacenamos inicialmente siguen ahí, gracias a la propiedad de &amp;#039;&amp;#039;&amp;#039;LocalStorage&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HTML&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;         &lt;br /&gt;
        &amp;lt;title&amp;gt;Ejemplo LocalStorage&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;script src=&amp;quot;https://code.jquery.com/jquery-3.5.1.js&amp;quot; integrity=&amp;quot;sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=&amp;quot; crossorigin=&amp;quot;anonymous&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;h1&amp;gt;Ejemplo - localStorage&amp;lt;/h1&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Nombre&amp;quot; id=&amp;quot;nombretxt&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;   &lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Apellido&amp;quot; id=&amp;quot;apellidotxt&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;button id=&amp;quot;boton-guardar&amp;quot;&amp;gt;Guardar&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
Nombre almacenado:&lt;br /&gt;
&amp;lt;label type=&amp;quot;text&amp;quot; id=&amp;quot;nombrelabel&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;                          &lt;br /&gt;
Apellido almacenado:&lt;br /&gt;
&amp;lt;label &amp;quot;text&amp;quot; id=&amp;quot;apellidolabel&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;button id=&amp;quot;boton-cargar&amp;quot;&amp;gt;&lt;br /&gt;
Cargar elementos&lt;br /&gt;
&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt; &lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function guardar() {&lt;br /&gt;
    // Leemos los datos escritos en los inputs&lt;br /&gt;
    const nom = document.getElementById(&amp;#039;nombretxt&amp;#039;).value;&lt;br /&gt;
    const apel = document.getElementById(&amp;#039;apellidotxt&amp;#039;).value;&lt;br /&gt;
&lt;br /&gt;
    // Guardamos los datos en el LocalStorage&lt;br /&gt;
    localStorage.setItem(&amp;#039;Nombre&amp;#039;, nom);&lt;br /&gt;
    localStorage.setItem(&amp;#039;Apellido&amp;#039;, apel);&lt;br /&gt;
&lt;br /&gt;
    // Limpiamos los inputs una vez leídos&lt;br /&gt;
    document.getElementById(&amp;#039;nombretxt&amp;#039;).value = &amp;quot;&amp;quot;;&lt;br /&gt;
    document.getElementById(&amp;#039;apellidotxt&amp;#039;).value = &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function cargar() {&lt;br /&gt;
    // Obtener los datos almacenados&lt;br /&gt;
    const nom = localStorage.getItem(&amp;#039;Nombre&amp;#039;);&lt;br /&gt;
    const ape = localStorage.getItem(&amp;#039;Apellido&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    // Mostramos los datos almacenados&lt;br /&gt;
    document.getElementById(&amp;#039;nombrelabel&amp;#039;).innerText = nom;&lt;br /&gt;
    document.getElementById(&amp;#039;apellidolabel&amp;#039;).innerText = ape;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;#039;boton-guardar&amp;#039;).addEventListener(&amp;#039;click&amp;#039;, guardar, false);&lt;br /&gt;
document.getElementById(&amp;#039;boton-cargar&amp;#039;).addEventListener(&amp;#039;click&amp;#039;, cargar, false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &amp;#039;&amp;#039;&amp;#039;Nota:&amp;#039;&amp;#039;&amp;#039; Si queremos guardar un un array o un JSON, recuerda que localStorage solo trabaja con texto, así:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Creamos un array&lt;br /&gt;
var arrayNombres = [&amp;#039;ana&amp;#039;, &amp;#039;manuel&amp;#039;, &amp;#039;patricia&amp;#039;, &amp;#039;daniel&amp;#039;];&lt;br /&gt;
// Guardamos el array pero en formato texto&lt;br /&gt;
localStorage.setItem(&amp;quot;nombres&amp;quot;, JSON.stringify(arrayNombres));&lt;br /&gt;
//...&lt;br /&gt;
// Ya podemos leer los datos guardados en local&lt;br /&gt;
var arrayNGuardados = JSON.parse(localStorage.getItem(&amp;quot;nombres&amp;quot;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== sessionStorage ===&lt;br /&gt;
Este es un objeto global (&amp;#039;&amp;#039;&amp;#039;[https://developer.mozilla.org/es/docs/DOM/Almacenamiento sessionStorage]&amp;#039;&amp;#039;&amp;#039;) que mantiene un área de almacenamiento que está disponible durante la sesión de página. Una sesión de página existe mientras el navegador esté abierto y sobrevive a recargas o restauraciones de páginas. Abrir una página en una nueva pestaña o en una ventana provoca que se cree una nueva sesión.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Guardar datos en el almacén de la sesión actual&lt;br /&gt;
sessionStorage.setItem(&amp;quot;username&amp;quot;, &amp;quot;John&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Acceder a algunos datos guardados&lt;br /&gt;
console.log( &amp;quot;username = &amp;quot; + sessionStorage.getItem(&amp;quot;username&amp;quot;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El objeto &amp;#039;&amp;#039;&amp;#039;sessionStorage&amp;#039;&amp;#039;&amp;#039; es más usado para manejar datos temporales que deberían ser guardados y recuperados si el navegador es recargado accidentalmente.&lt;br /&gt;
&lt;br /&gt;
Para ver el funcionamiento se puede emplear el ejemplo anterior simplemente cambiando &amp;#039;&amp;#039;&amp;#039;localStorage&amp;#039;&amp;#039;&amp;#039; por &amp;#039;&amp;#039;&amp;#039;sessionStorage&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Ejemplo con &amp;#039;&amp;#039;&amp;#039;sessionStorage&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;HTML&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Local Storage&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;Pruebas con Local Storage&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;form action=&amp;quot;#&amp;quot; id=&amp;quot;formulario&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;clave&amp;quot;&amp;gt;Clave : &amp;lt;/label&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;clave&amp;quot; id=&amp;quot;clave&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;valor&amp;quot;&amp;gt;Valor : &amp;lt;/label&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;valor&amp;quot; id=&amp;quot;valor&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Guardar&amp;quot; id=&amp;quot;guardar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;info&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;claves&amp;quot; id=&amp;quot;claves&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;porDefecto&amp;quot;&amp;gt;Selecciona clave&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;p id=&amp;#039;infoValor&amp;#039;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;scripts.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const formulario = document.getElementById(&amp;#039;formulario&amp;#039;);&lt;br /&gt;
const claves = document.getElementById(&amp;#039;claves&amp;#039;);&lt;br /&gt;
const infoValor = document.getElementById(&amp;#039;infoValor&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
formulario.addEventListener(&amp;#039;submit&amp;#039;, e =&amp;gt; {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
 &lt;br /&gt;
    const clave = formulario.clave.value;&lt;br /&gt;
    const valor = formulario.valor.value;&lt;br /&gt;
&lt;br /&gt;
    sessionStorage.setItem(clave, valor);&lt;br /&gt;
    claves.innerHTML += `&amp;lt;option&amp;gt;${clave}&amp;lt;/option&amp;gt;`;&lt;br /&gt;
&lt;br /&gt;
    formulario.reset();&lt;br /&gt;
&lt;br /&gt;
    claves.addEventListener(&amp;#039;change&amp;#039;, () =&amp;gt; {&lt;br /&gt;
        const contenido = sessionStorage.getItem(claves[claves.selectedIndex].textContent);&lt;br /&gt;
        console.log(contenido);&lt;br /&gt;
        infoValor.textContent = contenido; &lt;br /&gt;
&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[JavaScript|Volver]]&lt;/div&gt;</summary>
		<author><name>Vieites</name></author>
	</entry>
</feed>