Cómo configurar el indicador de seguridad de cookies usando javascript

3 minutos de lectura

Avatar de usuario de BobtheMagicMoose
BobtheMagicMoose

He intentado configurar una cookie usando document.cookie = "tagname = test; secure" pero esto no establece la bandera segura. ¿Lo estoy configurando mal? ¿Solo puedes configurarlo desde una respuesta del servidor? También me pregunto eso, porque he tenido dificultades para encontrar un ejemplo de su uso, ¿probablemente no se usa comúnmente?

¡Gracias un montón!

avatar de usuario de sfy
sfy

TL:DR

document.cookie = "tagname = test;secure";

Tienes que usar HTTPS para establecer un atributo seguro

El nombre normal (o formal, tal vez) es atributo. Ya que la bandera se refiere a otras cosas.

Más información

Atributos de las cookies:

Seguro: la cookie se enviará solo en transmisión HTTPS.

HttpOnly: no permita que los scripts accedan a las cookies. Puede configurar tanto Secure como HttpOnly.

Dominio: especifique los hosts a los que se enviará la cookie.

Ruta: cree ámbitos, la cookie se enviará solo si la ruta coincide.

Caduca: indica la duración máxima de la cookie.

Más detalles y usos prácticos. Controlar Prueba_de_atributos_de_cookies_(OTG-SESS-002)

ACTUALIZACIONES
Los siguientes contenidos vencen el 2 de junio de 2016.

Banderas de cookies

Las banderas de cookies son prefijos. Por el momento, se describen en el Borrador RFC como una actualización de la RFC6265

Estas banderas se utilizan con el atributo ‘seguro’.

__Secure-

El guión es una parte del prefijo. Esta bandera le dice al navegador que la cookie solo debe incluirse en ‘https’.

__Host-

Una galleta con esta bandera

  1. no debe tener el atributo ‘dominio’, solo se enviará al host que lo configuró.

  2. Debe tener un atributo de ‘ruta’, que se establece en “https://stackoverflow.com/”, porque se enviará al host en cada solicitud del host.

  • ¡Gracias! El problema era que estaba intentando configurar el atributo seguro sin estar en HTTPS.

    – Bob el Alce Mágico

    15 mayo 2016 a las 16:23

  • Probé tu document.cookie = "tagname = test;secure"; pero document.cookie retorno tagname=test, https, probado en las versiones actuales de Chromium y Firefox. UPD, oh, encontré secure bandera en el visor de cookies dentro de Devtools.

    – Vitaly Zdanévich

    18 de julio de 2017 a las 8:42


  • MDN menciona específicamente que está prohibido. desarrollador.mozilla.org/en-US/docs/Web/HTTP/…

    – mpoisot

    21 de septiembre de 2019 a las 21:18

  • @sfy Tengo que configurar seguro como verdadero, entonces, ¿qué cambio se requiere? Este es mi código js -> document.cookie = cookie_consent=${value}; expires=${expireDate} Secure; path=/; ??

    – Priyen Mehta

    6 de diciembre de 2022 a las 7:08


  • @PriyenMehta Debe verificar si se está comunicando con su servidor con HTTPS, y su servidor admite HTTPS.

    – sfy

    7 de diciembre de 2022 a las 7:26

porque la bandera se llama secureno seguridad:

document.cookie = "tagname = test;secure";

  • Lo siento, eso fue un error tipográfico en mi publicación original. Desde entonces lo he corregido. Cuando uso la consola Chrome, cuando escribo: document.cookie = "tagname = test;secure"; no se agregan cookies, pero cuando escribo document.cookie = "tagname = test"; se agrega. ¿Es esta una limitación para ingresar cosas en la consola de Chrome? Gracias por la respuesta.

    – Bob el Alce Mágico

    15 de mayo de 2016 a las 7:24


  • @BobtheMagicMoose ¿Está intentando esto en un sitio web HTTPS? A mí me funciona bien, pero tienes que hacerlo en un sitio web HTTPS.

    – rebane2001

    6 de enero de 2020 a las 8:55

Este paquete de cookies es fácil de usar @ https://www.npmjs.com/package/js-cookie

 //to set cookie use
 Cookies.set('name', 'value', { expires: 7, path: '' });

 //to read the cookie, use
 Cookies.get('name'); // => 'value'

 //to delete cookie this
 Cookies.remove('name')

  //to set secure cookie this
 Cookies.set('name', 'value', { secure: true });

  • el 7 en el caduca significa 7 dias

    – Chukwuemeka Maduekwe

    8 de noviembre de 2020 a las 20:23

Aunque el servidor respondió con Mayúsculas, y separó con espacio:

set-cookie: x = y; Secure

El javascript del cliente necesita poner en minúsculas el secure y eliminar el espacio en blanco después ;al igual que:

document.cookie = `x=y;secure`;

De lo contrario, no tendrá ningún efecto.

¿Ha sido útil esta solución?