الكعكات أو الـ Cookies هي ملفات نصية صغيرة تحتوي بعض المعلومات يرسلها الخادم ( Web Server ) للمتصفح ثم يقوم المتصفح بتخزينها على الحاسب الآلي للعميل للاستفادة من هذه المعلومات . ويتم إرسال الكعكات داخل الـ ( PHP Header ).
كل متصفح له كعكات منفصلة عن المتصفحات الأخرى ، والبيانات المخزنة في العكعكات لايمكن لأي موقع أن يصل إلها باستثناء الموقع الذي قام بتخزينها وذلك لخصوصية هذه المعلومات. فإذا تم إنتاج الكعكات من دومين prosentra.com ، فيمكن جلبها فقط من خلال خادم مرتبط بالدومين . فهذا يمنع المواقع الأخرى من الحصول على هذه المعلومات.
استخدامات الكعكات تتبع جلسات المستخدمين ( PHP Sessions ). تخزين البيانات حول الزيارات المتعددة. تخزينا معلومات عربة التسوق. تخزين معلومات تسجيل الدخول…وغيرها. كيفية عمل الكعكاتمن خلال درايتنا بالفكرة العامة لكيفية عمل المواقع الإلكترونية ( Websites ) وأنها عملية إرسال طلبات من المتصفح واستقبال الردود من الخادم ، وأن هذه المعلومات تتم داخل الغرفة المغلقة أو ما يسمى بالـ ( PHP Header ). فإن الكعكات هي أحد المعلومات التي يتم إرسالها داخل الـ header. ولكي نوضح كيفية عمل الكعكات برجاء ملاحظة المخطط التالي :
تسلسل العمليات :
كما نرى في الحالة رقم 1، فقد قام الشخص بطلب عرض صفحة index.html الخاصة بالموقع prosentra.com فقام المتصفح بإرسال الطلبات في الـ header إلى الخادم. فقام الخادم بالبحث عن الملف ، وعند وصوله للملف قام بإرجاع كود الحالة ( Status Code ) وهو 200 والذي يعبر عن نجاح وصول الخادم للمعلومات. ثم قام الخادم باسترجاع نوع محتوى الصفحة ( Content-Type ) وهو text/html . ثم قام بإنتاج كعكة عن طريق ( setcookie ) ، هذه الكعكة ستقوم بتخزين اسم المستخدم username بالقيمة Iamuser . ثم يقوم الخادم بإرسال محتويات الصفحة المطلوبه بالإضافة طبعاً إلى معلومات الـ Header .يقوم المتصفح بتخزين معلومات الكعكة على جهاز الشخص المتصفح ، وبالتالي عندما يقوم الشخص بطلب عرض محتويات الصفحة new.html فسيقوم الخادم بالرد بمحتويات الصفحة لكن لن يضطر لعمل كعكة أخرى إلا إذا انتهت صلاحية الكعكة التي تم تخزينها وهذا ما حدث في الحالة رقم 2. فالمتصفح يستخدم نفس الكعكة لجميع الطلبات المستقبلية المرسلة من نفس الدومين.
كيفية إعداد الكعكاتيتم إعداد الكعكات باستخدام الدالة setcookie
setcookie ('name', 'value', 'expire', 'path', 'domain', 'secure', 'httponly',)كما نرى أن هناك مجموعة من الوسائط يتم تمريرها للدالة وهي كالتالي :
name : اسم الكعكة وهو الاسم الذي سيستخدمه الخادم لإعداد الكعكة
value : قيمة الكعكة أو محتوى الكعكه ويمكن أن تحتوي على أبجدية رقمية Alphanumeric بحجم 4KB
expire : (اختياري) وهو وقت انتهاء صلاحية الكعكه وغالباً ما تستخدم دالة الوقت ()time مضافاً إليها عدد الثواني. وإذا لم يتم تحديد ذلك ستم إنهاء الكعكة مباشرة بمجرد غلق المتصفح .
time()+60*60*24*7;بحيث يكون :
الدالة ()time تقوم بجلب الوقت الحالي الرقم 60 الأول هو عدد الثواني الرقم 60 الثاني هو عدد الدقائق الرقم 24 هو عدد الساعات الرقم 7 هو عدد الأيامأي أن هذه الكعكة سيتم انهاء صلاحيتها بعد سبعة أيام.
path : (اختياري) وهو مسار الكعكه في الخادم . فإذا كان المسار هو ( / ) فقط، فإن الكعكه ستكون متاحة لكامل الموقع ، أما إذا كانت الكعكه خاصة بمجلد داخل الموقع وليكن (/subdirectory) فستكون الكعكة متاحة لهذا المجلد فقط. بشكل افتراضي، الكعكات متاحه للمجلدات التي يتم إعدادها داخلها.
domain : (اختياري) وهو الدومين ( Domain Name ) الخاص بالكعكة . فإذا كان العنوان prosentra.com فإن الكعكه متاحه لجميع العناوين الفرعيه ( Subdomains ) تحت هذا الدومين.
مثلاً :
إذا كان الدومين هو prosentra.com والدومين الفرعي هو images.prosentra.com فإن الكعكه تعمل لهذين الدومين. أما إذا كان الدومين هو images.prosentra.com فستعمل الكعكه لهذا العنوان فقط وليس للعنوان prosentra.com.
secure : (اختياري) تحدد ما إذا كانت الكعكه تستخدم بروتوكول النقل الآمن ( //:https) . فإذا كانت القيمة True فلابد أن يتم استخدام الكعكه من خلال اتصال آمن. القيمة الافتراضيه هي False.
httponly : (اختياري) وتستخدم لتحديد ما إذا كانت الكعكة تستخدم بروتوكول النقل http فقط . فإذا كانت القيمه True لن تستطيع اللغات مثل جافاسكريبت من استخدام الكعكات. وليس جميع المتصفحات تدعم httponly . القيمه الافتراضية هي false.
الوصول إلى الكعكاتالـ HTTP Headers عبارة عن مصفوفة ترابطية ( PHP Associative Array ) متعددة الأبعاد ، وبالتالي يتم تخزين الكعكات داخل مصفوفة ترابطية ، هذه المصفوفة تحمل الاسم COOKIE_$ ، وإذا لم تلاحظ فهي من المتغيرات الفوق شاملة ( PHP Super Global Variables ). وللوصول لقيم المصفوفات يتم كتابة الآتي :
$array['name']وبالتالي إذا أردنا الوصول لأي قيمة داخل المصفوفة COOKIE_$ يمكننا ذلك عن طريق :
$_COOKIE['username']; //Iamuser حذف الكعكات لحذف الكعكات عليك إعادة تعريفها مع وضع تاريخ في زمن الماضي يجب أن تكون جميع الوسائط التي تم تمريرها للدالة ()setcookie هي نفسها عن إعادة التعريف ، ماعدا الوقت الذي سيكون في الماضي //إضافة كعكة setcookie('username','Iamuser',time()+604800,'/') //حذف الكعكة setcookie('username','Iamuser',time()-604800,'/')ويمكن تعريف الوقت في الماضي بقيمة أكبر من التي تم تعريفها عن إضافة الكعكة تحسباً لإمكانية أن يكون الوقت في جهاز العميل لم يتم ضبطه.
مثال :
سنقوم بتعريف متغير ( PHP Variables ) وسنعطيه القيمة ” ليس للكعكة قيمة ” ، ثم سنقوم بتغيير قيمة هذه المتغير عن طريق كعكة لكي تصبح قيمته ” الكعكة لها قيمة الآن ”
<?php $test = 'لا يوجد قيمة'; if (isset($_COOKIE['test'])) $test = $_COOKIE['test']; setcookie('test', 'الكعكة الآن لها قيمة'); echo "<p><b>قيمة الكعكة هي: $test</b></p>"; ?>[button title=”عرض نتيجة الكود” link=”https://makiomar.com/php_example/php_cookies/php_cookies.php” target=”_blank” size=”” color=”” class=””]