العمل مع ملفات تعريف الارتباط في جافا سكريبت النقي دون صداع

مرحبا يا هابر!


واجهت مؤخرًا الحاجة للعمل مع ملفات تعريف الارتباط باستخدام JavaScript. عندما رأيت مدى فظاعة العمل مع document.cookie في JavaScript خالص ، ذهبت للبحث عن مكتبة لراحة العمل مع ملفات تعريف الارتباط. كما اتضح ، عدد قليل من المكتبات للعمل مع ملفات تعريف الارتباط ، على الرغم من أن للوهلة الأولى تبدو بسيطة ومريحة ، في عملية العمل معها تم اكتشاف الكثير من المزالق.هنا بعض منهم:


  • تلقي ملفات تعريف الارتباط على مسار محدد - واجهت بعض المكتبات التي تم اختبارها مشكلات في الوصول إلى ملفات تعريف الارتباط باستخدام مسار: على سبيل المثال ، لم أتمكن من الحصول على ملفات تعريف الارتباط بمسار من صفحة موقع ويب ، /أو العكس ، حيث كنت في "جذر" موقع تلقيته عدة مرات undefinedعندما حاولت الحصول على ملفات تعريف الارتباط على موقع محدد الطريقة/order
  • دعم JSON - يحدث ، ولكنه يعمل بشكل منحرف: على سبيل المثال ، عند تلقي ملف تعريف ارتباط يقوم بتخزين JSON ، ستحصل على سلسلة مشفرة بـ URI ستحتاج إلى فك تشفيرها وتحليلها. توصيل المكتبة برمزك وإضافة وظائف لحل هذه المشكلة خطأ بطريقة أو بأخرى.
  • حذف ملفات تعريف الارتباط - واجهت جميع المكتبات مشاكل في حذف ملفات تعريف الارتباط. قام الجميع تقريبًا بمسح قيمة ملفات تعريف الارتباط ، لكنهم لم يحذفوها. كانت المشاكل المنفصلة تتعلق بملفات تعريف الارتباط الخاصة بالجلسات: لم ترها بعض المكتبات "تشير إلى الفراغ" ، ولم يتمكن أي منها من حذف ملفات تعريف الارتباط الخاصة بالجلسات.
    لن أسمي المكتبات التي جربتها ، لأنني لا أعتقد أن هذا صحيح فيما يتعلق بمطوريها ، لكنني سأوضح أنني جربت المكتبات الأكثر شعبية (وفقًا لـ npm ) للعمل مع ملفات تعريف الارتباط.

كانت المشكلة الأخيرة قد أغضبتني تمامًا ، وقررت أن الوقت قد حان لكتابة مكتبتي الخاصة للعمل مع ملفات تعريف الارتباط.


Cookie.js (npm - cookielib)


حلت هذه المكتبة جميع المشاكل المذكورة أعلاه ، مع الحفاظ على صغر حجم أسلافها وسهولة استخدام الوظائف.


لماذا يجب أن تستفيد منها؟


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