Travailler avec des cookies en JavaScript pur sans maux de tête

Bonjour, Habr!


J'ai récemment rencontré le besoin de travailler avec des cookies en utilisant JavaScript. Quand j'ai vu à quel point c'était horrible de travailler avec document.cookie en pur JavaScript, je suis allé à la recherche d'une bibliothèque pour la commodité de travailler avec les cookies. Il s'est avéré que peu de bibliothèques pour travailler avec les cookies, bien qu'à première vue semblent simples et pratiques, dans le processus de travail avec eux, de nombreux pièges ont été découverts.En voici quelques uns:


  • Réception de cookies sur un chemin spécifié - certaines des bibliothèques testées ont eu des problèmes d'accès aux cookies avec un chemin: par exemple, je ne pouvais pas obtenir de cookies avec un chemin à partir d'une page de site Web, /ou vice versa, étant à la "racine" d'un site, je l'ai reçu plusieurs fois undefinedlorsque j'ai essayé d'obtenir des cookies sur un spécifié le chemin/order
  • Prise en charge JSON - cela se produit, mais cela fonctionne de manière tordue: par exemple, lorsque vous recevez un cookie qui stocke JSON, vous obtiendrez une chaîne codée URI que vous devrez décoder et analyser vous-même. Connecter la bibliothèque à votre code et ajouter des fonctions pour résoudre ce problème est en quelque sorte faux.
  • Suppression des cookies - toutes les bibliothèques ont eu des problèmes avec la suppression des cookies. Presque tout le monde a effacé la valeur des cookies, mais ne l'a pas supprimée. Des problèmes distincts se posaient avec les cookies de session: certaines bibliothèques ne les voyaient pas «à blanc» et aucune d'entre elles ne pouvait supprimer les cookies de session.
    Je ne nommerai pas les bibliothèques que j'ai essayées, car je ne pense pas que ce soit correct par rapport à leurs développeurs, mais je préciserai que j'ai essayé les bibliothèques les plus populaires (selon npm ) pour travailler avec les cookies.

Le dernier problème m'avait complètement rendu furieux, et j'ai décidé qu'il était temps d'écrire ma propre bibliothèque pour travailler avec les cookies.


Cookie.js (npm - cookielib)


Cette bibliothèque a résolu tous les problèmes ci-dessus, en préservant la petite taille de ses prédécesseurs et la facilité d'utilisation des fonctions.


Pourquoi devriez-vous l'utiliser?


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