بسم الله الرحمن الرحيم
" درس مفصل عن الكوكيز "
<منقول من منتديات هاكرز فلسطين>
<الكاتب: Linux Girl>
مقدمة
تعد الكعكات ( الـ ******s ) من الوسائل المفيدة في انشاء مواقع اكثر تفاعلية ، فبواسطتها ستتمكن من معرفة هل قام المتصفح بزيارة موقعك من قبل ام لا ..
في هذا الدرس سنتعرف على الكعكات و كيف يمكننا استخدامها ...
اقسام الدرس :
1- معلومات عامة .
2- زراعة الكعكات على جهاز العميل .
3- قراءة الكعكات من جهاز العميل .
4- تطبيق : تخصيص لون الخلفية .
معلومات عامة
- ما هي ملفات الكوكيز ؟
ملفات الكوكيز عبارة عن ملفات نصية ، تقوم المواقع التي تزورها بإيداعها على القرص الصلب في جهازك ، وتحتوي هذه الملفات النصية على معلومات تتيح للموقع الذي أودعها أن يسترجعها عند الحاجة ، أي عند زيارتك المقبلة للموقع .
وتختلف المعلومات التي تخزن ضمن ملفات الكوكيز من موقع لآخر ، ولكن ليس بإمكان هذه المواقع استرجاع أي معلومات إضافية عنك أو عن جهازك ، باستثناء تلك المعلومات المخزنة في الملف النصي الخاص بها ، والتي تم إرسالها من قبل الموقع ، وبذلك لا تستطيع هذه المواقع الاطلاع على مضمون ملفات الكوكيز الأخرى ، أو أي ملفات خاصة على جهازك .
- كيف يتم إيداع ملفات الكوكيز على جهازك ؟
يرسل المتصفح ، عند إدخالك عنوان موقع في شريط العناوين ، طلباً إلى الموقع الذي حددته ، متضمناً عنوان IP الخاص به ، ونوع المتصفح الذي تستخدمه ، ونظام التشغيل الذي يدير جهازك . تخزّن هذه المعلومات في ملفات خاصة بالمزود Log Files ، ولا علاقة للكوكيز بالمعلومات التي يتم إرسالها . وفي الوقت ذاته يبحث المتصفح عن ملفات كوكيز ، التي تخص الموقع المطلوب ، فإذا وجدها يتم إرسالها مع طلب مشاهدة الموقع ، وإذا لم توجد ، فإن الموقع سيدرك أن هذه زيارتك الأولى إليه ، فيقوم بإرسال ملفات الكوكيز إلى جهازك لتخزن عليه .
وبإمكان الموقع تغيير المعلومات الموجودة ضمن ملفات الكوكيز أو إضافة معلومات جديدة كلما قمت بزيارة الموقع . يتم تخزين بعض ملفات الكوكيز في الذاكرة فقط ، بحيث يجري حذفها مباشرة عند إغلاقك المتصفح ، ولكن معظمها وتسمى "ملفات الكوكيز المثابرة"، يتم تخزينها لفترة محددة على القرص الصلب لحين انتهاء صلاحيتها وقد تدوم صلاحيتها مدة أشهر أو حتى سنوات . أما بعض ملفات الكوكيز التي تعرض تاريخ صلاحية لتاريخ سابق ، فإنها تُحذف مباشرة ولا تُخزَّن على قرصك الصلب . وتعود المعلومات المخزنة في ملفات الكوكيز إلى مزودات الموقع الذي أصدرها فقط ، وقد تعمم بعض الشركات الكبرى ملفات الكوكيز التي تصدرها على جميع مزوداتها ، لتنسيق المعلومات المتضمنة ، ولكي لا تصدر كل من مزوداتها ملفات كوكيز للمستخدم ذاته ، عند زيارته لصفحات مختلفة في الموقع .
- مكونات ملف الكوكيز :
يتكون عادة من عدة اجزاء هي اسم الملف ، قيمته ، تاريخ انتهاء مفعوله ، الموقع المالك له ...
زراعة الكعكات على جهاز العميل
أولا : كيف تزرع ملفات الكعكات :
يتم ذلك باستخدام الدالة set****** و تعريفها بالشكل التالي :
code:
________________________________________
boolean set****** ( string name [, string value [, int expire
[, string path [, string domain [, int secure]]]]])
________________________________________
تهمنا المدخلات الثلاث الاولى و هي :
name : اي اسم الكعكة ... فبامكانك ارسال اكثر من كعكة الى متصفح واحد و عندها يصبح الاسم هو الطريقة الوحيدة للتمييز .
value : القيمة ... فقط قيم نصية ... لا يمكنك وضع مصفوفة كقيمة و هذا أامر مهم ... لكن انتبه بامكانك وضع مصفوفة لكن بطريقة اخرى ... ؟ كيف ؟ : استخدم الدالة serialize لتحويل اي متغير في بي اتش بي الى شكل نصي و من ثم استخدم unserialize لاعادته الى الشكل الطبيعي .
expire : اي عدد الثواني من بدية عصر اليونكس ( 1 يناير 1970 ) و التي بعدها سيقوم المتصفح على جهاز المستخدم بحذف الكعكة ... و هنا ثلاث حالات :
--> أولاً : أن يكون الوقت المعطى كمدخل اكثر من الوقت الحالي على جهاز العميل و عندها تخزن الكعكة على جهاز العميل و تحذف عند انقضاء المدة .
--> ثانياً : أن يكون الوقت المعطى كمدخل اقل من الوقت على جهاز العميل و عندها لا يقوم المتصفح على جهاز العميل بتخزينها و اذا وجدت كعكة بنفس الاسم فانه يحذفها حتى لو لم تنتهي المدة .
--> ثالثاً : إذا لم تحدد وقتا فان الكعكة تخزن في ذاكرة المتصفح و تفقد حالما يغلق المستخدم الموقع .
مثال :
code:
________________________________________
<?
set******('site','http://www.palhackerz.com/',time()+3600);
?>
________________________________________
من الدوال المفيدة دالة time و التي ترجع الوقت الحالي على شكل عدد الثواني من بداية عصر اليونكس (1 يناير 1970) .
ثانيا كيف تحذف او تعدل كعكة:
لكي تحذف كعكة عليك أن ترسل كعكة بنفس الاسم و خالية القيمة و ذات وقت اقل من الوقت على جهاز المستخدم
مثال :
code:
________________________________________
<?
set******('site','',time()-360000);
?>
________________________________________
ملاحظات :
1- عندما تحدد زمنا ماضياً اجعله قيمة كبيرة لكي تتفادى فارق التوقيت بين الخادم و العميل .
2- لكي تعدل أي كعكة عليك حذفها و إرسالها من جديد .
ملاحظة مهمة :
يجب ان تستدعي الدالة set****** قبل أن ترسل اي شيء الى المتصفح .. فمثلا الكود التالي لن ينجح :
code:
________________________________________
<html>
<body>
<?
set******('site','palhackerz.com',time()+20000);
echo " Alfjr.com : the best islamic forum";
?>
</body>
</html>
________________________________________
بل لو كان هنالك مجرد سطر فارغ قبل علامة البداية ?> فلن تعمل الدالة set****** ...
المثال السابق كان من الممكن ان يكون :
code:
________________________________________
<? set******('site','palhackerz.com',time()+20000);
?>
<html>
<body>
<? echo " palhackerz.com : the best Hacking forum"; ?>
</body>
</html>
________________________________________
قراءة الكعكات من جهاز العميل
- كيف تستقبل المتغيرات من الكعكة :
كما قلنا بانه بامكانك ارسال اكثر من كعكة الى متصفح واحد ..
عندما يطلب المستخدم من متصفحهِ صفحة على موقعك فان المتصفح يقوم بارسال جميع الكعكات التي قمت انت بزراعتها عند المستخدم ... PHP تسهل عليك قراءة هذه الكعكات و تخزنها في مصفوفة اسمها ******_$ و هي مصفوفة من النوع Associative Arrays بحيث ان المفتاح هو اسم الكعكة و القيمة قيمة الكعكة كما ارسلتها .
مثال :
code:
________________________________________
<?
echo $_******['site'];
?>
________________________________________
و هذه تطبع :
code:
________________________________________
palhackerz.com
________________________________________
تطبيق : تخصيص لون الخلفية
كمثال بسيط دعنا نقوم بانشاء موقع مبسط و نستخدم الكعكات لكي نحفظ لون الخلفية المحببة الى الشخص ..
- ماذا لدينا ؟
1- الملف user.php : يقوم الملف بعمليتين :
--> الاولى : تحديد اللون الذي اختاره الزائر .
--> الثانية : عرض نموذج اختيار الللون و حفظ اللون المختار
2- الملف index.php إحدى صفحات الموقع و التي تستفيد من خدمات الملف user.php .
وإليك الكود الخاص بكل ملف :
1- الملف user.php :
code:
________________________________________
<?
/*-----------------------
******s-Based Background Selector..
Created By : "Rasha"<rasha@h4palestine.com>
For : h4palestine.com
-------------------------*/
function display_form(){
?>
<html>
<body>
<!-- Color setting Form -->
<form name=color_select method="GET">
<INPUT type="hidden" name="do" value="set_color">
<INPUT name="color" type="text" value="
<? echo get_color(); ?>">
<INPUT type="submit" value="احفظ اللون">
</FORM>
<!-- Color Clearing Form -->
<form name=color_clear method="GET">
<INPUT type="hidden" name="do" value="clear_color">
<INPUT type="submit" value="لا تتذكر لوني المفضل">
</FORM>
<?
}
function set_color(){
global $_GET;
set******('color',$_GET['color'],time()+36000);
header('Location:index.php');
}
function get_color(){
global $_******;
if(isset($_******['color'])){
return $_******['color'];
}else{
return "#FFFFFF";
}
}
function clear_color(){
set******('color',$_GET['color'],time()-36000);
header('Location:index.php');
}
// selection
if ($do=='display_form'){
display_form();
}elseif ($do=="set_color"){
set_color();
}elseif ($do=="clear_color"){
clear_color();
}
?>
________________________________________
- الدالة الاولى display_form تقوم فقط بعرض نموذج اختيار اللون .
- الدالة الثانية set_color تقوم بحفظ اللون المختار في كعكة و ترجع المستخدم الى الصفحة الرئيسية .
- الدالة الثالثة get_color ترجع قيمة اللون من الكعكة و اذا لم يكن هنالك قيمة فانها ترجع لون افتراضي وهو الابيض .
- الدالة الرابعة clear_color تقوم بمسح الكعكة بالطريقة التي ذكرناها في الدرس .
2- ملف الـ index.php :
ملف عادي جداً الا انه يطلب الدالة get_color من ملف user.php كما يلي :
code:
________________________________________
<html>
<BODY bgcolor="<? include('user.php');
echo get_color() ?>">
<h1>مرحبا بك .....</h1>
<br>
يمكنك تخصيص لون الخلفية من هنا
<br>
<a href="user.php?do=display_form"> صفحة تخصيص اللون</a>
</body>
</html>
________________________________________
انتهى،،،
بالتوفيق