مرحبا يا هابر!
واجهت مؤخرًا الحاجة للعمل مع ملفات تعريف الارتباط باستخدام JavaScript. عندما رأيت مدى فظاعة العمل مع document.cookie في JavaScript خالص ، ذهبت للبحث عن مكتبة لراحة العمل مع ملفات تعريف الارتباط. كما اتضح ، عدد قليل من المكتبات للعمل مع ملفات تعريف الارتباط ، على الرغم من أن للوهلة الأولى تبدو بسيطة ومريحة ، في عملية العمل معها تم اكتشاف الكثير من المزالق.هنا بعض منهم:
- تلقي ملفات تعريف الارتباط على مسار محدد - واجهت بعض المكتبات التي تم اختبارها مشكلات في الوصول إلى ملفات تعريف الارتباط باستخدام مسار: على سبيل المثال ، لم أتمكن من الحصول على ملفات تعريف الارتباط بمسار من صفحة موقع ويب ،
/
أو العكس ، حيث كنت في "جذر" موقع تلقيته عدة مرات undefined
عندما حاولت الحصول على ملفات تعريف الارتباط على موقع محدد الطريقة/order
- دعم JSON - يحدث ، ولكنه يعمل بشكل منحرف: على سبيل المثال ، عند تلقي ملف تعريف ارتباط يقوم بتخزين JSON ، ستحصل على سلسلة مشفرة بـ URI ستحتاج إلى فك تشفيرها وتحليلها. توصيل المكتبة برمزك وإضافة وظائف لحل هذه المشكلة خطأ بطريقة أو بأخرى.
- حذف ملفات تعريف الارتباط - واجهت جميع المكتبات مشاكل في حذف ملفات تعريف الارتباط. قام الجميع تقريبًا بمسح قيمة ملفات تعريف الارتباط ، لكنهم لم يحذفوها. كانت المشاكل المنفصلة تتعلق بملفات تعريف الارتباط الخاصة بالجلسات: لم ترها بعض المكتبات "تشير إلى الفراغ" ، ولم يتمكن أي منها من حذف ملفات تعريف الارتباط الخاصة بالجلسات.
لن أسمي المكتبات التي جربتها ، لأنني لا أعتقد أن هذا صحيح فيما يتعلق بمطوريها ، لكنني سأوضح أنني جربت المكتبات الأكثر شعبية (وفقًا لـ npm ) للعمل مع ملفات تعريف الارتباط.
كانت المشكلة الأخيرة قد أغضبتني تمامًا ، وقررت أن الوقت قد حان لكتابة مكتبتي الخاصة للعمل مع ملفات تعريف الارتباط.
حلت هذه المكتبة جميع المشاكل المذكورة أعلاه ، مع الحفاظ على صغر حجم أسلافها وسهولة استخدام الوظائف.
لماذا يجب أن تستفيد منها؟
- , , .
- — 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. !