Trabalhando com cookies em JavaScript puro sem dor de cabeça

Olá Habr!


Recentemente, encontrei a necessidade de trabalhar com cookies usando JavaScript. Quando vi como era horrível trabalhar com document.cookie em JavaScript puro, procurei uma biblioteca para a conveniência de trabalhar com cookies. Como se viu, poucas bibliotecas para trabalhar com cookies, embora à primeira vista pareçam simples e convenientes, no processo de trabalhar com elas, muitas armadilhas foram descobertas.Aqui estão alguns deles:


  • Recebendo cookies em um caminho especificado - algumas das bibliotecas testadas tiveram problemas para acessar cookies com um caminho: por exemplo, nĂŁo consegui obter cookies com um caminho de uma página de site /ou vice-versa, estando na "raiz" de um site, recebi-o várias vezes undefinedquando tentei obter cookies em um determinado o caminho/order
  • Suporte a JSON - ocorre, mas funciona de maneira torta: por exemplo, ao receber um cookie que armazena JSON, vocĂŞ obtĂ©m uma string codificada em URI que precisará decodificar e analisar. Conectar a biblioteca ao seu cĂłdigo e adicionar funções para resolver esse problema está errado.
  • ExclusĂŁo de cookies - todas as bibliotecas tiveram problemas com a exclusĂŁo de cookies. Quase todo mundo limpou o valor dos cookies, mas nĂŁo o excluiu. Problemas separados estavam com os cookies da sessĂŁo: algumas bibliotecas nĂŁo os viram "em branco" e nenhuma delas pĂ´de excluir os cookies da sessĂŁo.
    Não vou citar as bibliotecas que tentei, porque acho que isso não está correto em relação aos desenvolvedores, mas vou esclarecer que tentei as bibliotecas mais populares (de acordo com a npm ) por trabalhar com cookies.

O Ăşltimo problema me enfureceu completamente e decidi que era hora de escrever minha prĂłpria biblioteca para trabalhar com cookies.


Cookie.js (npm - cookielib)


Esta biblioteca resolveu todos os problemas acima, preservando o tamanho pequeno de seus antecessores e a facilidade de uso de funções.


Por que você deveria usá-lo?


  • , , .
  • — 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