العربية
  • كوكي
  • nextjs
  • خالي من الخادم

كيفية إصلاح خطأ تجاوز حجم الكوكيز عن طريق تقسيم الكوكيز

حل لمشكلة تجاوز حجم الكوكيز: تقسيم الكوكي إلى عدة كوكيز أصغر وإعادة بنائها على الجانب الخادم. يعمل هذا الحل بشكل جيد خصوصًا للمنصات الخالية من الخوادم دون الحاجة إلى بنية تحتية إضافية.

Sijie
Sijie
Developer

الخلاصة: عندما يتجاوز حجم الكوكيز حد 4KB في المتصفح، قم بتقسيمه إلى عدة كوكيز أصغر وأعد بنائها على الجانب الخادم. يعمل هذا الحل بشكل جيد خصوصًا للمنصات الخالية من الخوادم دون الحاجة إلى بنية تحتية إضافية.

استخدام الكوكيز في Logto SDKs

في معظم Logto SDKs لتطبيقات الويب التقليدية، نقوم بتخزين بيانات الجلسة في كوكيز HTTP فقط لأسباب أمنية. إليك نهجنا:

عندما يقوم SDK بأداء عمليات تتطلب بيانات الجلسة، فإنه:

  • يقوم بتشفيرها باستخدام التشفير المتناظر
  • يخزن النص المشفر في كوكي HTTP فقط
  • يضع علامات الأمان لضمان نقل HTTPS فقط

هذا النهج لا يتطلب تخزينًا خارجيًا ويمكن نشره مباشرة على منصات الخوادم الخالية الشهيرة مثل Vercel دون أي تغييرات في البنية التحتية.

المشكلة: خطأ تجاوز حجم الكوكيز

ومع ذلك، عند تنفيذ دعم متعدد المنظمات، واجهنا حداً. لقد نما حجم الكوكيز لدينا إلى ما يتجاوز حد 4KB في المتصفح لأننا كنا بحاجة إلى تخزين:

  • بيانات تسجيل الدخول وغيرها من بيانات الجلسة
  • تذاكر الهوية لمصادقة المستخدم
  • تذاكر التحديث
  • تذاكر الوصول مع مؤشرات الموارد المختلفة
  • تذاكر المنظمات والتي تكون في JWT مع الحمولة، واحدة لكل منظمة، والتي يمكن أن تكون كبيرة جدًا في حالة وجود عدة منظمات نشطة في نفس الوقت

أدى هذا إلى حدوث الخطأ:

تفرض المتصفحات حدودًا صارمة لحجم الكوكيز، حيث تحد معظمها الكوكيز الفردية إلى 4KB وإجمالي حجم الكوكيز إلى 8KB لكل نطاق.

ماذا عن استخدام التخزين الخارجي؟

استخدام تخزين خارجي مثل Redis أو قاعدة بيانات سيستلزم إعداد بنية تحتية إضافية، مما يزيد من التكلفة والتعقيد لمستخدمي SDK. وهذا يتعارض مع هدفنا في توفير حل يناسب المطورين.

بينما قد يكون التخزين في الذاكرة بديلاً، إلا أنه لا يعمل جيدًا في البيئات الخالية من الخوادم حيث تكون الأمثلة مؤقتة والذاكرة لا تُشارك بين الطلبات.

الحل: تقسيم الكوكيز

الحل البسيط هو تقسيم الكوكيز الكبيرة إلى أجزاء أصغر. توضح هذه المقالة النهج باستخدام Next.js كمثال:

1. تقسيم بيانات الجلسة

2. تخزين الأجزاء

3. إعادة البناء عند الطلب

أفضل الممارسات للتنفيذ

1. إدارة حجم الجزيئات

2. إدارة الجلسات بوضوح

مراقبة إجمالي حجم الكوكيز:

الخاتمة

يوفر تقسيم الكوكيز حلاً أنيقًا سهل التنفيذ ولا يسبب تعطلاً كبيرًا في بنية التطبيق القائمة. بمجرد تقسيم الكوكيز الكبيرة إلى أجزاء أصغر، يمكن للمطورين التغلب على قيود حجم المتصفح دون تغيير نهج إدارة الجلسات الأساسي أو إضافة تبعيات خارجية.