بروتوكول HTTP

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

Hypertext Transfer Protocol : HTTP = بروتوكول نقل البيانات بين الزبون (الحاسوب) و الخادوم (الخادم أو المزوّد) . و يتم هذا التواصل عبر وساطة " تطبيقات الويب " . و من أشهرها و أكثرها استعمالا هي متصفح الأنترنت و يسمّى أيضا : (عميل المستخدم = user agent) ، المستخدم هو طبعا أنتم ، و المتصفح هو عميلكم .

Secure = S : HTTPS ، بروتوكول مُشفّر و محمي ، يستعمل رخصة من رخص الحماية مثل SSL
Browser = User Agent = تطبيقة الويب = عميل المستخدم = متصفّح الأنترنت .
Server = خادم ، خادوم ، مُزوّد .
عندما تنقرون مثلا على وصلة أو رابط لزيارة صفحة موقع ما ، تكونون قد قدّمتم بذلك طلبا إلى الخادوم . و قبل إرساله ، يقوم متصفّحكم بإضافة معلومات في بداية رأس الصفحة تسمّى HTTP headers ، و من بينها نجد معلومات عن رقم إصدار متصفّحكم ، نظام استغلال حاسوبكم ، طريقة الترميز التي يعتمدها الموقع ، رابط الصفحة التي تودون زيارتها ، طريقة إرسالكم للطلب (GET أو POST) ... هذه البيانات هي التي تجعل التواصل ممكنا بين الآلتين .
إذا تفحّصنا رأس الصفحة عند قيامنا بهذا الطلب مثلا : http://eppr.blogspot.com نجد بعض البيانات من بينها :
GET / HTTP/1.1
Host: eppr.blogspot.com
User-Agent: Mozilla/5.0 ...
Accept: text/html ...
Accept-Language: en-US,en ...

و في نفس الوقت سنجد أيضا الجواب الذي أرسله الخادوم أثناء تنفيذه للطلب

HTTP/1.1 200 OK
Date: Mon, 20 Jan 2014 20:03:05 GMT
Server: Apache
Content-Length: 4248
Content-Type: text/html; charset=UTF-8
العملية بمجملها تتم كالتالي :
  • ربط الإتصال بين المتصفح و الخادوم
  • تقديم الطلب مع إضافات رأس الصفحة
  • جواب الخادوم بقبول الطلب ثم تنفيذه (OK 200)
  • غلق الإتصال بين الآلتين
لو قمنا بتقديم طلب ثان لزيارة صفحة أخرى في نفس الموقع ، فالخادوم لن يعرف بأنكم أنتم من قدّمتم الطلب الأول ، فهو إن صحّ القول ، يعمل ببلادة ، و لا يجعل أي مقارنة أو ربط بين الطلبات التي ترسلونها . يعالج كل طلب على حدة ، و عند تنفيذه يغلق بابه و لا يتذكّر شيئا .
تخيلوا بأنكم تريدون الإحتفاظ بإسم العضو الذي سجل دخوله بنجاح في موقعكم ، و إظهاره على جميع الصفحات التي يزورها .
في المرّة الأولى ، عند ملأه استمارة الدخول بشكل صحيح و إرسال الطلب ، يقوم php بمعالجة الإسم و كلمة المرور و يقدمهما للخادوم الذي يرجع له نتيجة طلبه ، مثلا :
" مرحبا بك 
سامح، لقد تم تسجيل دخولك بنجاح ".
لكن بمجرّد ما أن ينتقل زيد إلى صفحة أخرى ، حتى يتفاجأ بوجود خطأ بأن إسمه غير معروف . و هذا طبيعي نظرا لتصرّف المزود ، فهو لن يجعل أي مقارنة أو رابط بين الطّلبين . تذكرون عندما رأينا في درس المتغيرات ، بأن للمتغير حياة جد قصيرة ، و تنتهي عند انتهاء تحميل صفحتكم . و رأينا بعدها جزءا من الحل لتمرير هذه البيانات بين الصفحات ، و هو استعمال GET_$ و POST_$ . لكن تذكروا جيدا بأن هذين المتغيرين و جدا لإرسال الطلبات ، و ليس بالإحتفاظ بالبيانات على طول الموقع . فلو استعملناهما في مثالنا السابق في جميع الصفحات للإحتفاظ ببيانات العضو مثلا ، لأصبح موقعنا مكبّاً للنفايات .

لتجاوز هذه المعضلة ، وجد المتغيران المحددان و الشاملان COOKIE_$ و SESSION_$ :
  • $_COOKIE : ملف صغير ، أقصى حجمه هو 4ko ، ينشئه المتصفح على حاسوب المستخدم و بأمر من الخادوم . و يضم بيانات عن المستخدم . و يمكن لهذه البيانات أن تبقى مُخزّنة لشهور عدّة .
  • $_SESSION : يقوم أيضا بتخزين البيانات لكن هذه المرّة على الخادوم . بحيث تكون أكثر أماناً . و تنتهي صلاحيتها عندما يغادر المستخدم موقعكم . و غالبا ما لا نعرف بالتحديد متى غادر.