Trabajar con cookies en JavaScript puro sin dolor de cabeza

Hola Habr!


Recientemente encontré la necesidad de trabajar con cookies usando JavaScript. Cuando vi lo horrible que era trabajar con document.cookie en JavaScript puro, busqué una biblioteca para la comodidad de las cookies. Al final resultó que, pocas bibliotecas para trabajar con cookies, aunque a primera vista parecen simples y convenientes, en el proceso de trabajar con ellas se descubrieron muchas trampas.Éstos son algunos de ellos:


  • Recepción de cookies en una ruta específica : algunas de las bibliotecas probadas tuvieron problemas para acceder a las cookies con una ruta: por ejemplo, no pude obtener cookies con una ruta desde una página web, /o viceversa, al estar en la "raíz" de un sitio lo recibí varias veces undefinedcuando intenté obtener cookies en un sitio específico la manera/order
  • Soporte de JSON : ocurre, pero funciona de forma torcida: por ejemplo, al recibir una cookie que almacena JSON, obtendrá una cadena codificada por URI que deberá decodificar y analizar usted mismo. Conectar la biblioteca a su código y agregar funciones para resolver este problema es de alguna manera incorrecto.
  • Eliminar cookies : todas las bibliotecas tuvieron problemas para eliminar las cookies. Casi todos borraron el valor de las cookies, pero no lo eliminaron. Los problemas separados fueron con las cookies de sesión: algunas bibliotecas no las vieron "en blanco", y ninguna de ellas pudo eliminar las cookies de sesión.
    No nombraré las bibliotecas que probé, porque no creo que esto sea correcto en relación con sus desarrolladores, pero aclararé que probé las bibliotecas más populares (según npm ) para trabajar con cookies.

El último problema me había enfurecido por completo y decidí que era hora de escribir mi propia biblioteca para trabajar con cookies.


Cookie.js (npm - cookielib)


Esta biblioteca resolvió todos los problemas anteriores, preservando el pequeño tamaño de sus predecesores y la facilidad de uso de las funciones.


¿Por qué deberías usarlo?


  • , , .
  • 707
  • -,
  • JSON " " ( JSON, , JSON-, JSON-)
  • -
  • ( ES6!)
  • JS ( )
  • npm, CDN,


:


setCookie('name', 'value');  //  
setCookie('name', {'key': 'value'});  // json 

"" :


setCookie('name', 'value', {expires: Date(3)});  //   
setCookie('name', {'key': 'value'}, {expires: Date(3)});  // json  

setCookie() . .


:


getCookie('name')  //  
getCookie('name', json=true)  //   json,    json.   JSON

:


deleteCookie('name');  // json   -  !


, setCookie(name, value, dict), dict " ": " "


-:


  • path (str) — URL,
  • domain (str) — ,
  • expires (Date object) — "" (/ Date-)
  • max-age (int) — ( expires)
  • secure (bool) — true, HTTPS. false
  • samesite (str) — , XSRF-… strict lax. , .
    • httpOnly (bool) — true, JavaScript. false


, . GitHub. .



, printf RekGRpth. !


All Articles