ملفات تعريف الارتباط في Javaالبرنامج النصي: مثال على التعيين والحصول والحذف

⚡ ملخص ذكي

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

  • 🍪 التعريف الأساسي: ملف تعريف الارتباط هو عبارة عن زوج من المفتاح والقيمة يتم حفظه بواسطة المتصفح ويتم إرجاعه تلقائيًا مع كل طلب مطابق.
  • ✍️ كتابة Operaنشوئها: يؤدي تعيين قيمة إلى document.cookie إلى إضافة أو استبدال ملف تعريف ارتباط واحد في كل مرة ولا يمحو الملفات الأخرى أبدًا.
  • ؟؟؟؟ عرض Operaنشوئها: قراءة document.cookie تُرجع سلسلة واحدة مفصولة بفاصلة منقوطة، لذلك يجب فصل الزوج المطلوب يدويًا.
  • 🗑️ حذف Operaنشوئها: يؤدي تحديد تاريخ انتهاء الصلاحية في الماضي إلى إزالة ملف تعريف الارتباط، ويجب أن يتطابق المسار والنطاق مع القيم الأصلية.
  • 🔐 سمات الأمان: يقيد Secure الإرسال إلى HTTPS، ويحظر HttpOnly الوصول إلى البرامج النصية، ويتحكم SameSite في الإرسال عبر المواقع.
  • 📏 حدود الحجم: تحتوي كل ملفات تعريف الارتباط على ما يقارب 4 كيلوبايت، وتحتفظ المتصفحات بحوالي 50 ملف تعريف ارتباط لكل نطاق، لذا فإن البيانات الكبيرة تنتمي إلى مكان آخر.
  • 💾 بدائل التخزين: يحتوي كل من localStorage و sessionStorage على المزيد من البيانات ولا يتم ربطهما أبدًا بطلبات الشبكة.

ملفات تعريف الارتباط في Javaسيناريو

ما هي ملفات تعريف الارتباط؟

ملف تعريف الارتباط هو جزء من البيانات يُخزّن على جهاز الكمبيوتر الخاص بك ليتمكن متصفحك من الوصول إليه. ربما تكون قد استفدت من مزايا ملفات تعريف الارتباط، سواءً كنت تعلم ذلك أم لا. هل سبق لك أن أبقيت حسابك مُسجلاً على موقع مثل فيسبوك لتجنب إدخال بياناتك في كل مرة تحاول فيها تسجيل الدخول؟ إذا كانت الإجابة بنعم، فأنت تستخدم ملفات تعريف الارتباط. تُحفظ ملفات تعريف الارتباط على شكل أزواج من المفتاح والقيمة.

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

لماذا تحتاج إلى ملف تعريف الارتباط؟

التواصل بين أ متصفح الويب ويتم ذلك عبر الخادم باستخدام بروتوكول HTTP غير المُحتفظ بالحالة. يتعامل هذا البروتوكول مع كل طلب بشكل مستقل، فلا يحتفظ الخادم بالبيانات بعد إرسالها إلى المتصفح. ولكن في كثير من الأحيان، قد نحتاج إلى هذه البيانات مرة أخرى. وهنا يأتي دور ملفات تعريف الارتباط (الكوكيز). فبفضلها، لا يحتاج متصفح الويب إلى التواصل مع الخادم في كل مرة نحتاج فيها إلى البيانات، بل يمكن جلبها مباشرةً من جهاز الكمبيوتر.

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

Javascript تعيين ملف تعريف الارتباط

يمكنك إنشاء ملفات تعريف الارتباط باستخدام خاصية document.cookie على النحو التالي.

document.cookie = "cookiename=cookievalue"

يمكنك إضافة تاريخ انتهاء صلاحية لملف تعريف الارتباط، بحيث يُحذف من جهاز الكمبيوتر في ذلك التاريخ. يجب تحديد تاريخ انتهاء الصلاحية بتوقيت غرينتش (UTC/GMT). في حال عدم تحديد تاريخ انتهاء الصلاحية، سيُحذف ملف تعريف الارتباط تلقائيًا عند إغلاق المتصفح.

document.cookie = "cookiename=cookievalue; expires= Thu, 21 Aug 2031 20:00:00 UTC"

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

document.cookie = "cookiename=cookievalue; expires= Thu, 21 Aug 2031 20:00:00 UTC; path=/ "

// إنشاء ملف تعريف ارتباط بنطاق الصفحة الحالية ومسار يغطي النطاق بأكمله.

⚠️ تحذير: يجب أن يكون تاريخ انتهاء الصلاحية في المستقبل. أما التاريخ الذي انقضى بالفعل فيُوجّه المتصفح لحذف ملف تعريف الارتباط فورًا، وهي بالضبط التقنية المستخدمة في قسم الحذف أدناه.

Javaنص برمجي لجلب ملف تعريف الارتباط

يمكنك الوصول إلى ملف تعريف الارتباط بهذه الطريقة، والتي ستعيد جميع ملفات تعريف الارتباط المحفوظة للنطاق الحالي.

var x =  document.cookie

القيمة المُعادة هي سلسلة نصية واحدة على النحو التالي: name1=value1; name2=value2لا توجد طريقة مدمجة لقراءة ملف تعريف ارتباط واحد بالاسم، لذا يجب تقسيم السلسلة. تُعيد الدالة المساعدة أدناه قيمة واحدة وسلسلة فارغة في حالة عدم وجود الاسم.

function getCookie(name) {
    const pairs = document.cookie.split(";");
    for (let i = 0; i < pairs.length; i++) {
        const pair = pairs[i].trim();
        if (pair.indexOf(name + "=") === 0) {
            // decode in case the value contained spaces or symbols
            return decodeURIComponent(pair.substring(name.length + 1));
        }
    }
    return "";
}

document.cookie = "username=Ann Smith; path=/";
console.log(getCookie("username"));
console.log(getCookie("missing") === "");

الإخراج:

Ann Smith
true

Javaبرنامج حذف ملفات تعريف الارتباط

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

document.cookie = "cookiename= ; expires = Thu, 01 Jan 1970 00:00:00 GMT"

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

// created with an explicit path
document.cookie = "theme=dark; path=/; max-age=2592000";

// deletion must repeat that same path
document.cookie = "theme=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT";

// max-age=0 achieves the same result in one shorter line
document.cookie = "theme=; path=/; max-age=0";

شرح خصائص ملفات تعريف الارتباط

كل سمة بعد الفاصلة المنقوطة الأولى تُغيّر مدة صلاحية ملف تعريف الارتباط، والطلبات التي تحمله، والبرامج التي يمكنها قراءته. المرجع أدناه يُغطي جميع هذه السمات.

السمة الهدف مثال
تنتهي تاريخ الحذف النهائي بتنسيق UTC تاريخ الانتهاء: الخميس، ٢١ أغسطس ٢٠٣١، الساعة ٢٠:٠٠:٠٠ بالتوقيت العالمي المنسق
أقصى عمر العمر بالثواني محسوب من الآن الحد الأقصى للسن = 2592000
مسار نطاق الدليل داخل المجال المسار=/
نطاق نطاق المضيف، بما في ذلك النطاقات الفرعية domain=example.com
يتم الإرسال فقط عبر اتصال HTTPS
HttpOnly مخفي عن ملف تعريف الارتباط document.cookie، يتم تعيينه بواسطة الخادم فقط HttpOnly
نفس الموقع التحكم في إرسال الطلبات عبر المواقع SameSite=Lax

يستحق SameSite اهتمامًا خاصًا لأن المتصفحات تطبق الآن قيمة افتراضية. وتعمل القيم الثلاث المقبولة على النحو التالي.

  • صارم: لا يتم إرسال ملف تعريف الارتباط أبدًا عندما يأتي الطلب من موقع آخر، وهو الإعداد الأكثر أمانًا لجلسات الخدمات المصرفية.
  • لاكس: تنتقل ملفات تعريف الارتباط مع عمليات التصفح الرئيسية مثل النقر على رابط، ولكن ليس مع الصور أو الإطارات الموجودة في مواقع أخرى. هذا هو الإعداد الافتراضي للمتصفحات الحديثة.
  • لا شيء: يتم إرسال ملف تعريف الارتباط في كل طلب عبر المواقع ويجب أن يقترن بسمة Secure، وإلا سيرفضه المتصفح.
// a well configured cookie set from client side script
document.cookie = "language=en; path=/; max-age=31536000; SameSite=Lax; Secure";

💡 نصيحة: لا يمكن تطبيق سمة HttpOnly من Javaهذا أمرٌ مقصود. لا يمكن ضبطه إلا من خلال رأس استجابة الخادم، وهذا ما يحمي ملفات تعريف الارتباط الخاصة بالجلسة من هجمات البرمجة النصية عبر المواقع.

جرب هذا المثال بنفسك

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

<html>
<head>
	<title>Cookie!!!</title>
	<script type="text/javascript">
		function createCookie(cookieName,cookieValue,daysToExpire)
        {
          var date = new Date();
          date.setTime(date.getTime()+(daysToExpire*24*60*60*1000));
          document.cookie = cookieName + "=" + cookieValue + "; expires=" + date.toGMTString();
        }
		function accessCookie(cookieName)
        {
          var name = cookieName + "=";
          var allCookieArray = document.cookie.split(';');
          for(var i=0; i<allCookieArray.length; i++)
          {
            var temp = allCookieArray[i].trim();
            if (temp.indexOf(name)==0)
            return temp.substring(name.length,temp.length);
       	  }
        	return "";
        }
		function checkCookie()
        {
          var user = accessCookie("testCookie");
          if (user!="")
        	alert("Welcome Back " + user + "!!!");
          else
          {
            user = prompt("Please enter your name");
            num = prompt("How many days you want to store your name on your computer?");
            if (user!="" && user!=null)
            {
            createCookie("testCookie", user, num);
            }
          }
        }
	</script>
</head>
<body onload="checkCookie()"></body>
</html>

السلوك المتوقع:

First run  : "Please enter your name"  -> Ann
             "How many days you want to store your name on your computer?" -> 5
Second run : alert box shows  Welcome Back Ann!!!

Code تفسير: تقوم دالة createCookie بتحويل عدد الأيام إلى أجزاء من الثانية وإضافتها إلى الوقت الحالي، مما ينتج عنه تاريخ انتهاء الصلاحية. أما دالة accessCookie فتقسم سلسلة ملف تعريف الارتباط باستخدام الفواصل المنقوطة، ثم تقص كل جزء، وتقارن بداية الجزء بالاسم المطلوب. وتربط دالة checkCookie بين الدالتين عند تحميل الصفحة.

⚠️ تحذير: يستخدم المثال toGMTString()وهو اسم مستعار مهمل. يجب أن يستدعي الكود الجديد toUTCString() بدلاً من ذلك، بما أن النموذج القديم قد تتم إزالته في النهاية من المتصفحات.

مقارنة بين ملفات تعريف الارتباط والتخزين المحلي وتخزين الجلسة

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

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

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

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

الأسئلة الشائعة

يبلغ حجم كل ملف تعريف ارتباط حوالي 4 كيلوبايت، وتحتفظ معظم المتصفحات بحوالي 50 ملف تعريف ارتباط لكل نطاق. أما الملفات ذات القيم الأكبر، فينبغي وضعها في التخزين المحلي أو جلبها من الخادم عند الحاجة.

تشمل الأسباب الشائعة تاريخ انتهاء صلاحية ملف تعريف الارتباط، أو مسار غير متطابق، أو فتح صفحة من نظام الملفات بدلاً من الخادم، أو حظر المتصفح لملفات تعريف الارتباط. تحقق من لوحة التطبيقات في أدوات المطورين.

لا. يتم إخفاء ملفات تعريف الارتباط HttpOnly عمدًا من ملف document.cookie حتى لا تتمكن البرامج النصية المُضافة من سرقة رمز الجلسة. يراها الخادم فقط، في رؤوس الطلب.

ملفات تعريف الارتباط الخاصة بالطرف الأول تابعة للنطاق الموجود في شريط العنوان. أما ملفات تعريف الارتباط الخاصة بالطرف الثالث، فيتم تعيينها بواسطة نطاق مضمن، مثل نطاق المعلن، وتقوم المتصفحات الآن بتقييدها أو حظرها افتراضياً.

نعم. عادةً ما تخزن ملفات تعريف الارتباط الصغيرة مُعرّف المحادثة حتى تتمكن الأداة من استعادة سلسلة المحادثات في الزيارة التالية. أما الرسائل نفسها فتُحفظ على خوادم مزود الخدمة.

لا. تنتقل ملفات تعريف الارتباط مع كل طلب مطابق ويمكن قراءتها بواسطة البرامج النصية ما لم يتم ضبط HttpOnly. يُخزن فقط مُعرّف غير شفاف ويُحتفظ بالبيانات الشخصية على الخادم.

تلخيص هذه التدوينة بـ: