جلسة PHP وملفات تعريف الارتباط PHP مع مثال

⚡ ملخص ذكي

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

  • 🍪 ما هي ملفات تعريف الارتباط؟ ملف تعريف الارتباط هو ملف صغير، يصل حجمه إلى 4 كيلوبايت، يقوم الخادم بتخزينه على جهاز العميل ويتم إرجاعه مع كل طلب لاحق.
  • 🗄️ ما هي الجلسات؟ تقوم الجلسة بتخزين البيانات على الخادم تحت معرف فريد، يتم الاحتفاظ به في مصفوفة $_SESSION ويتم الرجوع إليه بواسطة ملف تعريف ارتباط الجلسة.
  • ؟؟؟؟ الفرق الرئيسي: تُخزَّن ملفات تعريف الارتباط على جهاز المستخدم وتناسب البيانات الصغيرة غير الحساسة؛ أما الجلسات فتُخزَّن على الخادم وتحتوي على بيانات أكبر أو بيانات خاصة.
  • 🛠️ إنشاء ملفات تعريف الارتباط: تقوم الدالة setcookie() بتعيين اسم وقيمة وعلامات اختيارية مثل انتهاء الصلاحية والمسار والنطاق والأمان و httponly قبل أي إخراج HTML.
  • 📝 إنشاء الجلسات: تبدأ الدالة session_start() جلسة، وبعد ذلك تقوم بقراءة وكتابة القيم من خلال المصفوفة العامة الفائقة $_SESSION.
  • 🗑️ تنظيف: قم بإنهاء صلاحية ملف تعريف الارتباط عن طريق تحديد وقت سابق؛ قم بإنهاء الجلسة باستخدام session_destroy() أو امسح قيمة واحدة باستخدام unset().
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن لأدوات الذكاء الاصطناعي تنفيذ معالجة الجلسات الآمنة وتحديد نقاط الضعف في ملفات تعريف الارتباط أو الجلسات في كود PHP الحالي.

ملفات تعريف الارتباط والجلسات في لغة PHP

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

ملف تعريف الارتباط هو ملف صغير بحجم أقصى يبلغ 4 كيلوبايت يقوم خادم الويب بتخزينه على جهاز الكمبيوتر الخاص بالعميل.

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

لا يمكن قراءة ملف تعريف الارتباط إلا من النطاق الذي تم إصداره منه. على سبيل المثال، لا يمكن قراءة ملف تعريف الارتباط الذي تم تعيينه باستخدام النطاق www.guru99.com من النطاق Care.guru99.com.

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

يمكن أن يكون ملف تعريف الارتباط الذي أنشأه المستخدم مرئيًا له فقط. لا يمكن للمستخدمين الآخرين رؤية قيمته.

تحتوي معظم متصفحات الويب على خيارات لتعطيل ملفات تعريف الارتباط، أو ملفات تعريف الارتباط الخاصة بأطراف ثالثة، أو كليهما.

إذا كان الأمر كذلك، فإن PHP يستجيب بتمرير رمز تعريف الارتباط في URL.

يوضح الرسم البياني أدناه كيفية عمل ملفات تعريف الارتباط.

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

هنا،

1) يطلب المستخدم صفحة تقوم بتخزين ملفات تعريف الارتباط

2) يقوم الخادم بتعيين ملف تعريف الارتباط على جهاز الكمبيوتر الخاص بالمستخدم

3) ستعيد طلبات الصفحة الأخرى من المستخدم اسم ملف تعريف الارتباط وقيمته

لماذا ومتى تستخدم ملفات تعريف الارتباط؟

  • بروتوكول HTTP هو بروتوكول عديم الحالة؛ تسمح لنا ملفات تعريف الارتباط بـ tracتُستخدم ملفات تعريف الارتباط (الكوكيز) لمعرفة حالة التطبيق، وهي ملفات صغيرة تُخزّن على جهاز المستخدم. يختلف مسار تخزين هذه الملفات باختلاف المتصفح، حيث يخزّنها متصفح إنترنت إكسبلورر عادةً في مجلد "ملفات الإنترنت المؤقتة".
  • تخصيص تجربة المستخدم – يتحقق ذلك من خلال السماح للمستخدمين بتحديد تفضيلاتهم. وتُخصَّص طلبات الصفحات اللاحقة بناءً على التفضيلات المُحدَّدة في ملفات تعريف الارتباط.
  • Tracking الصفحات التي يزورها المستخدم

إنشاء ملفات تعريف الارتباط

لنلقِ نظرة الآن على الصيغة الأساسية المستخدمة لإنشاء ملف تعريف الارتباط.

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

?>

هنا،

  • "setcookie" هو وظيفة PHP تستخدم لإنشاء ملف تعريف الارتباط.
  • "cookie_name" هو اسم ملف تعريف الارتباط الذي سيستخدمه الخادم عند استرداد قيمته من متغير المصفوفة $_COOKIE. وهو إلزامي.
  • "cookie_value" هي قيمة ملف تعريف الارتباط وهي إلزامية.
  • يُعدّ "[expiry_time]" اختياريًا؛ ويمكن استخدامه لتحديد مدة صلاحية ملف تعريف الارتباط، مثل ساعة واحدة. يتم تحديد الوقت باستخدام دالة time() في PHP، مع إضافة أو طرح عدد من الثواني أكبر من صفر، أي time() + 3600 لساعة واحدة.
  • "[cookie_path]" اختياري؛ يمكن استخدامه لتعيين مسار ملف تعريف الارتباط على الخادم. تعني الشرطة المائلة للأمام "/" أن ملف تعريف الارتباط سيكون متاحًا على النطاق بأكمله. الدلائل الفرعية تحد من وصول ملفات تعريف الارتباط إلى المجال الفرعي.
  • يُعدّ "[domain]" اختياريًا؛ ويمكن استخدامه لتحديد التسلسل الهرمي للوصول إلى ملفات تعريف الارتباط، أي www.cookiedomain.com يعني المجال بأكمله بينما www.sub.cookiedomain.com يحد من وصول ملفات تعريف الارتباط إلى www.sub.cookiedomain.com ومجالاتها الفرعية.
  • يُعدّ خيار "[secure]" اختياريًا؛ وقيمته الافتراضية هي "خطأ". ويُستخدم لتحديد ما إذا كان سيتم إرسال ملف تعريف الارتباط عبر بروتوكول HTTPS إذا تم ضبطه على "صحيح"، أو عبر بروتوكول HTTP إذا تم ضبطه على "خطأ".
  • يُعدّ خيار "[httponly]" اختياريًا. إذا تم ضبطه على "صحيح"، فسيتم استخدام لغات البرمجة النصية من جانب العميل مثل Javaسيناريو لا يمكن الوصول إلى ملف تعريف الارتباط.

ملاحظة: يجب تنفيذ دالة setcookie في PHP قبل علامة فتح HTML.

لنلقِ نظرة الآن على مثال يستخدم ملفات تعريف الارتباط.

سنقوم بإنشاء برنامج أساسي يسمح لنا بتخزين اسم المستخدم في ملف تعريف ارتباط تنتهي صلاحيته بعد ستين ثانية.

يوضح الكود أدناه تنفيذ المثال أعلاه "cookies.php".

<?php
setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds
echo 'the cookie has been set for 60 seconds';
?>

الإخراج:

the cookie has been set for 60 seconds

استرداد قيمة ملف تعريف الارتباط

قم بإنشاء ملف آخر باسم "cookies_read.php" بالكود التالي.

<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>

الإخراج:

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )

ملاحظة: $_COOKIE هو متغير عام مدمج في لغة PHP. يحتوي على أسماء وقيم جميع ملفات تعريف الارتباط المُعيّنة.

يتم تحديد عدد ملفات تعريف الارتباط وحجمها بواسطة المتصفح، وعادة ما يكون حوالي 50 ملف تعريف ارتباط لكل نطاق و4 كيلوبايت لكل ملف تعريف ارتباط.

اختبار تطبيقنا. لنفترض أنك قمت بحفظ ملفات PHP الخاصة بك في مجلد phptuts.

  • الخطوة 1 - افتح متصفح الويب الخاص بك وأدخل URL http://localhost/phptuts/cookies_read.php

استرداد قيمة ملف تعريف الارتباط

ملاحظة: تم عرض مجموعة فارغة فقط

  • الخطوة الثانية - تصفح إلى URL http://localhost/phptuts/cookies.php

استرداد قيمة ملف تعريف الارتباط

  • الخطوة 3 - ارجع إلى علامة التبويب الأولى، ثم انقر فوق زر التحديث

استرداد قيمة ملف تعريف الارتباط

انتظر دقيقة، ثم انقر على زر التحديث مرة أخرى. ما النتائج التي حصلت عليها؟

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

  • إذا كنت تريد تدمير ملف تعريف الارتباط قبل وقت انتهاء صلاحيته، فعليك ضبط وقت انتهاء الصلاحية على وقت مضى بالفعل.
  • أنشئ ملفًا جديدًا باسم cookie_destroy.php يحتوي على الكود التالي
<?php

setcookie("user_name", "Guru99", time() - 360,'/');

?>
  • كرر الخطوات من 1 إلى 3 من القسم أعلاه حول استرداد قيم ملفات تعريف الارتباط.
  • فتح URL http://localhost/phptuts/cookie_destroy.php
  • قم بالتبديل إلى URL http://localhost/phptuts/cookies_read.phpما النتائج التي يعرضها؟

ما هي الجلسة؟

  • الجلسة هي متغير عام يتم تخزينه على الخادم.
  • يتم تعيين معرف فريد لكل جلسة يتم استخدامه لاسترداد القيم المخزنة.
  • عند إنشاء جلسة، يتم تخزين ملف تعريف ارتباط يحتوي على معرّف الجلسة الفريد على جهاز المستخدم، ويتم إرجاعه مع كل طلب إلى الخادم. إذا كان متصفح العميل لا يدعم ملفات تعريف الارتباط، فسيتم عرض معرّف جلسة PHP الفريد في URL.
  • تتمتع الجلسات بالقدرة على تخزين بيانات كبيرة نسبيًا مقارنة بملفات تعريف الارتباط.
  • يتم حذف قيم الجلسة تلقائيًا عند إغلاق المتصفح. إذا كنت تريد تخزين القيم بشكل دائم، فيجب عليك تخزينها في قاعدة البيانات.
  • تمامًا مثل متغير المصفوفة $_COOKIE، يتم تخزين متغيرات الجلسة في متغير المصفوفة $_SESSION. تمامًا مثل ملفات تعريف الارتباط، يجب أن تبدأ الجلسة قبل أي علامات HTML.

لماذا ومتى نستخدم الجلسات؟

  • تريد تخزين المعلومات المهمة مثل معرف المستخدم بشكل أكثر أمانًا على الخادم حيث لا يستطيع المستخدمون الضارون التلاعب بها.
  • تريد تمرير القيم من صفحة إلى أخرى.
  • تريد بديلاً لملفات تعريف الارتباط على المتصفحات التي لا تدعمها.
  • تريد تخزين المتغيرات العامة بطريقة أكثر كفاءة وأمانًا مقارنةً بتمريرها في... URL.
  • أنت تتطورping تطبيق مثل متجرping عربة يجب أن تخزن المعلومات مؤقتًا بسعة أكبر من 4 كيلوبايت.

إنشاء جلسة

لإنشاء جلسة، يجب عليك أولاً استدعاء دالة PHP session_start ثم تخزين قيمك في متغير المصفوفة $_SESSION.

لنفترض أننا نريد معرفة عدد مرات تحميل صفحة ما. يمكننا استخدام جلسة للقيام بذلك.

يوضح الكود أدناه كيفية إنشاء واسترجاع القيم من الجلسات.

<?php

session_start(); // start the session

if(isset($_SESSION['page_count']))
{
$_SESSION['page_count'] += 1;
}
else
{
$_SESSION['page_count'] = 1;
}
echo 'You are visitor number ' . $_SESSION['page_count'];

?>

الإخراج:

You are visitor number 1

تدمير متغيرات الجلسة

تُستخدم الدالة session_destroy() لتدمير جلسة PHP بأكملها.

إذا كنت ترغب في حذف عنصر جلسة واحد فقط، يمكنك استخدام الدالة unset().

يوضح الكود أدناه كيفية استخدام كلتا الطريقتين.

<?php

session_destroy(); // destroy entire session

?>
<?php

unset($_SESSION['product']); // destroy product session item

?>

تقوم الدالة session_destroy بإزالة جميع بيانات الجلسة، بما في ذلك ملفات تعريف الارتباط المرتبطة بالجلسة.

يؤدي إلغاء التعيين إلى تحرير متغيرات الجلسة الفردية فقط. أما البيانات الأخرى فتبقى سليمة.

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

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

بشكل افتراضي، يحفظ PHP بيانات الجلسة كملفات في المسار المحدد بواسطة session.save_path في ملف php.ini، وغالبًا ما يكون هذا المسار هو مجلد الملفات المؤقتة في النظام. أما المواقع ذات الزيارات العالية، فغالبًا ما تُحوّل هذا المسار إلى قاعدة بيانات أو Redis أو Memcached.

قم بتعيين علامة HttpOnly حتى Javaلا يمكن للبرنامج النصي قراءة ملف تعريف الارتباط، وعلامة الأمان بحيث يتم الإرسال عبر بروتوكول HTTPS فقط، وسمة SameSite للحد من الإرسال عبر المواقع. بالنسبة للجلسات، يُعاد إنشاء المعرّف بعد تسجيل الدخول.

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

نعم. يمكن للذكاء الاصطناعي فحص علامات HttpOnly أو Secure المفقودة، ومخاطر تثبيت الجلسة، وتخزين البيانات الحساسة في ملفات تعريف الارتباط، وعدم إعادة إنشاء المعرف بعد تسجيل الدخول، ثم اقتراح الرمز المصحح.

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