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 undefined
quando 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.
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'});
"" :
setCookie('name', 'value', {expires: Date(3)});
setCookie('name', {'key': 'value'}, {expires: Date(3)});
setCookie()
. .
:
getCookie('name')
getCookie('name', json=true)
:
deleteCookie('name');
, 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. !