أهلاً بك يا صديقي في هذا الدليل التقني الشامل. إذا كنت مطور ويب أو بدأت للتو رحلتك في تعلم JavaScript، فلا بد أنك واجهت هذا السؤال المحير: “أين يجب أن أخزن بيانات المستخدم؟”.
في عالم تطوير المواقع، نعتمد بشكل أساسي على ثلاث تقنيات لتخزين البيانات في متصفح المستخدم (Client-side storage)، وهي: Local Storage، Session Storage، و Cookies. ورغم أن الثلاثة يؤدون وظائف متشابهة، إلا أن لكل منهم “شخصية” مختلفة تماماً واستخدامات محددة.
في هذا المقال، سنقوم بتفكيك هذه المفاهيم بأسلوب مبسط وعملي، لنعرف ما هو الفرق بين Local Storage و Session Storage و Cookies في JavaScript؟ وكيف تختار الأنسب لمشروعك القادم.

ما هو مفهوم التخزين (Storage) في المتصفح؟#
قبل أن نغوص في التفاصيل، دعنا نفهم شرح الـ Storage بشكل عام. ببساطة، المتصفح ليس مجرد أداة لعرض المواقع، بل هو بيئة عمل قادرة على الاحتفاظ ببيانات صغيرة على جهاز المستخدم. هذا يغنينا في كثير من الأحيان عن إرسال كل صغيرة وكبيرة إلى “السيرفر”، مما يجعل الموقع أسرع وأكثر سلاسة.
لماذا نحتاج للتخزين المحلي؟#
- تحسين تجربة المستخدم: مثل حفظ وضعية “الوضع الليلي” (Dark Mode).
- الأداء: تقليل الطلبات المرسلة للسيرفر (Server requests).
- الاستمرارية: بقاء المستخدم مسجلاً للدخول حتى بعد إغلاق المتصفح.
أولاً: ما هو Local Storage؟#
عند السؤال عن ما هي خاصية localStorage في JavaScript؟، يمكننا تعريفها بأنها مخزن دائم للبيانات داخل متصفح المستخدم. هي جزء من “Web Storage API” وتسمح لك بحفظ البيانات على شكل (Key/Value pairs).
مميزات Local Storage:#
- الاستمرارية (Persistence): البيانات لا تضيع أبداً، حتى لو أغلق المستخدم المتصفح أو أطفأ الجهاز.
- السعة: توفر مساحة تخزين جيدة (تصل إلى 5MB أو 10MB حسب المتصفح).
- السهولة: التعامل معها عبر JavaScript بسيط جداً.
ملاحظة مهمة: البيانات في Local Storage لا تُحذف إلا يدوياً بواسطة الكود البرمجي أو قيام المستخدم بمسح بيانات المتصفح (Clear Cache/Cookies).
ثانياً: ما هو Session Storage؟#
إذا كانت الـ Local Storage هي “الذاكرة الدائمة”، فإن الـ Session Storage هي “الذاكرة المؤقتة”. هي تشبهها تماماً في طريقة العمل، لكنها تختلف جذرياً في “عمر” البيانات.
ما الفرق بين Sessionstorage و Localstorage؟#
الفرق الجوهري يكمن في جلسة العمل (Session). البيانات في Session Storage تُمسح بمجرد إغلاق “التبويب” (Tab) أو المتصفح. كما أنها لا تتوفر عبر التبويبات المختلفة (حتى لو كانت لنفس الموقع)، فكل تبويب له “جلسة” خاصة به.
ثالثاً: ما هي ملفات تعريف الارتباط (Cookies)؟#
الـ Cookies هي التقنية الأقدم والأكثر شهرة. هي ليست مجرد وسيلة تخزين، بل هي أداة تواصل بين المتصفح والسيرفر. مع كل طلب (HTTP Request) ترسله للسيرفر، يتم إرسال الكوكيز معه تلقائياً.
هل يعتبر Local Storage نوعاً من الكوكيز؟#
الإجابة المختصرة هي لا. الكوكيز تُستخدم أساساً لتعريف المستخدم وتتبع الجلسات بين المتصفح والسيرفر، بينما الـ Local Storage هو مخزن بيانات محلي بحت لا يراه السيرفر إلا إذا قمت أنت بإرسال البيانات يدوياً.

مقارنة شاملة: Local Storage vs Session Storage vs Cookies#
هذا الجدول يلخص لك الفروقات الجوهرية التي تحتاجها كمطور لاتخاذ قرارك:
| وجه المقارنة | Local Storage | Session Storage | Cookies |
|---|---|---|---|
| سعة التخزين | كبيرة (5MB - 10MB) | كبيرة (5MB) | صغيرة جداً (4KB) |
| تاريخ الانتهاء | لا ينتهي أبداً | عند إغلاق التبويب (Tab) | يتم تحديده يدوياً (أو عند الجلسة) |
| الارتباط بالسيرفر | لا ترسل مع الطلبات | لا ترسل مع الطلبات | تُرسل مع كل طلب HTTP |
| سهولة الاستخدام | سهلة جداً (Web API) | سهلة جداً (Web API) | معقدة نوعاً ما (تطلب Parse) |
| الأمان | أقل (عرضة لـ XSS) | أقل (عرضة لـ XSS) | أكثر أماناً (HttpOnly flag) |
متى نستخدم كل نوع؟ (أمثلة عملية)#
1. حالات استخدام Local Storage#
- حفظ إعدادات واجهة المستخدم (مثل اللغة، الثيم).
- حفظ بيانات “سلة التسوق” في مواقع التجارة الإلكترونية التي لا تتطلب تسجيل دخول فوراً.
- تخزين المسودات التي يكتبها المستخدم ولم ينشرها بعد.
2. حالات استخدام Session Storage#
- حفظ بيانات “الاستمارات” الطويلة (Multi-step forms) لضمان عدم ضياعها إذا قام المستخدم بعمل Refresh للصفحة.
- تخزين العمليات الحساسة التي يجب أن تنتهي بمجرد خروج المستخدم من الصفحة.
3. حالات استخدام Cookies#
- المصادقة (Authentication): حفظ الـ (Session ID) أو الـ (Token) الخاص بتسجيل الدخول.
- التتبع (Tracking): تتبع سلوك المستخدم لأغراض إعلانية.
- تخصيص التجربة: تذكر المستخدم عند عودته للموقع.
أيهما أفضل: الكوكيز أم الجلسات؟#
هذا السؤال شائع جداً، والإجابة تعتمد على “أين تريد معالجة البيانات؟”.
- الكوكيز (Cookies): هي الأفضل إذا كنت تحتاج لقراءة البيانات من جهة “السيرفر” (Server-side) مثل التحقق من هوية المستخدم.
- الجلسات/التخزين المحلي (Web Storage): هي الأفضل للبيانات التي تخص “واجهة المستخدم” (Client-side) والتي لا يحتاج السيرفر لمعرفتها باستمرار، لأنها توفر مساحة أكبر ولا تستهلك “باندويث” في كل طلب.
الجانب الأمني: هل تخزين البيانات في المتصفح آمن؟#
يجب أن تكون حذراً جداً. لا تقم أبداً بتخزين معلومات حساسة مثل (كلمات المرور، أرقام البطاقات الائتمانية) في Local Storage أو Session Storage.
تحذير تقني: أي كود JavaScript يعمل على صفحتك يمكنه قراءة البيانات الموجودة في Local Storage. هذا يعني أنه في حال تعرض موقعك لهجوم XSS (Cross-Site Scripting)، يمكن للمهاجم سرقة كافة البيانات المخزنة.
لذلك، بالنسبة للبيانات الحساسة، يفضل دائماً استخدام HttpOnly Cookies لأنها تمنع الوصول للبيانات عبر JavaScript.
كيف نستخدم هذه التقنيات برمجياً؟ (أمثلة كود عملية)#
جميع هذه التقنيات تعمل من خلال JavaScript داخل المتصفح، والفرق الأساسي بينها هو مدة حفظ البيانات ونطاق الوصول إليها، لكن طريقة الاستخدام البرمجية متشابهة إلى حد كبير.
التعامل مع Local Storage#
يُستخدم Local Storage لحفظ البيانات بشكل دائم داخل المتصفح، وتظل محفوظة حتى بعد إغلاق المتصفح أو إعادة تشغيل الجهاز، ما لم يتم حذفها يدويًا.
مثال: حفظ إعدادات المستخدم (الوضع الليلي)#
localStorage.setItem('theme', 'dark'); // حفظ بيانات
// قراءة البيانات
const currentTheme = localStorage.getItem('theme');
console.log(currentTheme); // dark
// حذف عنصر واحد
localStorage.removeItem('theme');
// مسح كل البيانات
localStorage.clear();ملاحظات مهمة:#
- البيانات تُخزن بصيغة String فقط
- البيانات مشتركة بين كل التبويبات (Tabs) لنفس الموقع
تخزين كائن (Object) داخل Local Storage#
بما أن Local Storage لا يدعم إلا النصوص، يجب تحويل الكائن إلى JSON:
const user = {
name: 'Mahmoud',
role: 'Admin'
};
// حفظ الكائن
localStorage.setItem('user', JSON.stringify(user));
// قراءة الكائن
const savedUser = JSON.parse(localStorage.getItem('user'));
console.log(savedUser.name); // Mahmoud
التعامل مع Session Storage#
Session Storage يعمل بنفس طريقة Local Storage تقريبًا، لكن البيانات تُحذف تلقائيًا عند إغلاق التبويب (Tab).
مثال: تخزين بيانات مؤقتة أثناء الجلسة#
sessionStorage.setItem('temp_id', '12345'); // حفظ بيانات الجلسة
// قراءة البيانات
const tempId = sessionStorage.getItem('temp_id');
// حذف عنصر
sessionStorage.removeItem('temp_id');
// مسح كل البيانات
sessionStorage.clear();التعامل مع Cookies (Cookie Storage)#
الـ Cookies تُستخدم غالبًا لتخزين بيانات صغيرة يتم إرسالها تلقائيًا مع كل Request إلى السيرفر.
إنشاء Cookie باستخدام JavaScript#
document.cookie = "language=ar; path=/; max-age=86400";قراءة جميع Cookies#
console.log(document.cookie);ملاحظة: قراءة Cookie معينة تحتاج لمعالجة النص يدويًا أو استخدام دوال مساعدة.
حذف Cookie#
document.cookie = "language=ar; path=/; max-age=0";مقارنة سريعة من ناحية الاستخدام البرمجي#
| التقنية | طريقة الاستخدام | مدة التخزين | تُرسل للسيرفر |
|---|---|---|---|
| Local Storage | JavaScript | دائم | ❌ |
| Session Storage | JavaScript | مؤقت | ❌ |
| Cookies | JavaScript / Server | حسب الإعداد | ✅ |
الأسئلة الشائعة (FAQ)#
هل يؤثر مسح ملفات الارتباط (Cookies) على الـ Local Storage؟#
عادةً، عند اختيار “مسح بيانات المتصفح” (Clear browsing data)، تتوفر خيارات لمسح الكوكيز وملفات الموقع الأخرى. إذا قام المستخدم بمسح “Site Data”، فسيتم حذف كل من الـ Local Storage و الـ Cookies.
ما هو الفرق بين بيانات الكوكيز وبيانات الجلسة (Session data)؟#
بيانات الكوكيز تُخزن في المتصفح وتُرسل للسيرفر. أما “Session data” بمعناها الواسع في البرمجة (مثل PHP Sessions)، فهي تُخزن على السيرفر نفسه، ويتم ربطها بالمتصفح عبر “Cookie” صغير يحتوي على رقم تعريفي فقط.
هل من الأفضل مسح الذاكرة المؤقتة (Cache) أم الكوكيز؟#
- الذاكرة المؤقتة (Cache): امسحها إذا كان الموقع لا يعرض التحديثات الجديدة للصور أو الملفات.
- الكوكيز (Cookies): امسحها إذا كنت تواجه مشاكل في تسجيل الدخول أو تريد إنهاء تتبع الموقع لك.
وفي النهاية#
فهم الفرق بين Local Storage و Session Storage و Cookies هو حجر الزاوية في بناء تطبيقات ويب احترافية وآمنة. تذكر دائماً:
- استخدم Local Storage للبيانات الدائمة وغير الحساسة.
- استخدم Session Storage للبيانات المؤقتة التي تنتهي بإغلاق التبويب.
- استخدم Cookies لعمليات المصادقة والتواصل مع السيرفر.
أتمنى أن يكون هذا الدليل قد أزال اللبس عن هذه المفاهيم البرمجية المهمة. إذا كان لديك أي استفسار حول كيفية تطبيق هذه التقنيات في مشروعك، لا تتردد في طرحه!










