المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : درس مفصل :: استخدام الجلسات sessions [لنسخة phpbb]



salima
10-31-2013, بتوقيت غرينيتش 10:10 PM
http://www.dzbatna.com/images/icons/iconrote.gif ط¯ط±ط³ :: ط§ط³طھط®ط¯ط§ظ… ط§ظ„ط¬ظ„ط³ط§طھ sessions [ظ„ظ†ط³ط®ط© phpbb] (http://www.dzbatna.com/t17369/)



مصطلحات
جَلسَة : ترجمة للكلمة session. يمكن تخيلها كإناء يحوي متغيرات تظل نشطة طوال زيارة شخص ما لموقع.
متغير : ترجمة للكلمة variable. اسم رمزي يحتوي على قيمة رقمية أو نصية أو غيرها ... ويمكن تغيير قيمته.
برنامج نصي : ترجمة للكلمة script. ملف يحوي كود codeاً برمجياً بلغة ما من لغات البرمجة النصية. أي اللغات التي تبقى ملفات الكود code بدون تحويل للغة الآلة (أصفار وواحدات). وإنما يقوم المفسر الخاص باللغة بتفسير ملف البرنامج في كل مرة يستدعى فيها هذا الملف. لذا أضيفت عند الترجمة كلمة نصية للدلالة على البرنامج عبارة عن نص وليس ملفاً تنفيذياً.


ما هي الجلسة session ؟

كما في التعريف أعلاه، يمكننا التفكير فيها على أنها مصطلح لما يمكن اعتباره - مؤقتاً - مجلداً خاصاً يتم فيه حفظ المتغيرات وقيمها الخاصة بالزائر الحالي الموقع. بالطبع ليست الجلسة هي هذا المجلد، لكنها الآلية المتبعة في تخزين المتغيرات التي نرغب في الاحتفاظ بها عن الزائر واسترجاع هذه المتغيرات ، وأخيراً التخلص منها حين تنتهي الحاجة منها. الهدف من الجلسة session هو أن الاحتفاظ ببعض البيانات (بالطبع داخل متغيرات) طوال زيارة كل شخص للموقع. ويحتفظ ببيانات كل شخص بشكل مستقل عن الأشخاص الآخرين حتى لو كانوا يزورون الموقع في اللحظة نفسها.


ما الحاجة لها ؟

يلزم المبرمج في أي لغة الاحتفاظ بالقيم في متغيرات لإجراء بعض العمليات عليها. على سبيل المثال : أنت تحتفظ باسم قاعدة البيانات وعنوانها في متغير للاتصال بقاعدة البيانات عند الحاجة لأخذ بيانات أو إضافة بيانات . وكما هو معلوم أن المتغير يظل موجوداً طوال عمر البرنامج (أي في لغة php، طوال مدة تنفيذ البرنامج النصي أو ما يسمى بالـ script، طبعاً البرنامج أو الـscript ما هو إلا ملف نصي كتب فيه برنامج "كود code" بلغة الـphp). وعملية تنفيذ البرنامج النصي سريعة جداً تنتهي في الحال. أي أنه بعد انتهاء التنفيذ نكون قد فقدنا قيم المتغيرات إلا إذا قمنا بتنفيذ البرنامج مرة أخرى. لكن في البرمجة الفعلية لأي موقع يكون لدينا أكثر من ملف. على سبيل المثال،لدينا في موقع ما ملفان اثنان، الأول يقوم بالتحقق من كون الزائر للموقع هو أحد أعضاء الموقع (طبعاً بسؤاله عن اسم المشترك وكلمة المرور الخاصة به، وقد تكونان محفوظتان في قاعدة بيانات أو ملف ما في الموقع). ويقوم الملف الآخر بعرض بيانات هذا العضو. لكننا قلنا قبل قليل أن المتغير ينتهي مع انتهاء تنفيذ الملف. أي أننا تحققنا من عضوية الزائر للموقع في الملف الأول وحددنا أنه زائر بأن خزنا في متغير ما لنقل مثلاً، userName$ إن كان عضواً في الموقع (نضع اسمه كقيمة لهذا المتغير) وإن لم يكن من أعضاء الموقع (نضع قيمة "NO" مثلاً). كيف أعرف في الملف الآخر أنه عضو، حيث أن قيمة المتغير userName$ ستنتهي مباشرة بعد انتهاء تنفيذ الملف الأول. هل أظل أسأله في كل ملف عن اسم المستخدم الخاص به وكلمة المرور. بالطبع لا، والحل هو الاحتفاظ باسم المتغير وقيمته في مكان ما خارج الملفين الاثنين قبل الانتهاء من تنفيذ الملف الأول، ونقوم في الملف الآخر (أو بقية الملفات في الموقع) باستدعاء هذا المتغير باسمه ونتحقق من قيمته هو فقط. فإذا كان زائراً عرضنا بياناته وإن لم يكن عرضنا بيانات أخرى كأن نعرض عليه الاشتراك في الموقع أو نموذجاً يعبئه لصبح عضواً. هذه الآلية هي ما يسمى بالجلسة session.


ماهية الجلسة ؟

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

وضع قيمة في متغير
رمز Code:
$variable_one = "AbSbA";
وضع قيمة المتغير السابق في جلسة
رمز Code:
$_SESSION["variable_one"] = $variable_one;
أو هكذا مباشرة ...
رمز Code:
$_SESSION["variable_one"] = "AbSbA";
الآن نستطيع استدعاء هذا المتغير من داخل أي ملف يزوره هذا الشخص



رمز Code:
If ($_SESSION["variable_one"] != "No" || $_SESSION["variable_one"] = NULL) { //قم بعرض رسالة توضح إمكانية قيامه هذا الزائر بالتسجيل } Else{ //قم بعرض بيانات الزائر }
كذلك نستطيع أن نحذف هذا المتغير من الجلسة باستخدام الدالة unset بالطريقة التالية
رمز Code:
Unset ($_SESSION["variable_one"]);
لكن ... انتظر.
لا تستطيع استخدام تعيين متغيرات على أنها متغيرات جلسة أو جلب قيم متغيرات الجلسة إلا بعد أن تصدر أمر بدء الجلسة وهو الأمر التالي :
رمز Code:
Session_start ();
ويجب كتابة أمر بداية الجلسة قبل إرسال أي بيانات إلى برنامج المتصفح في جهاز الزائر (أي قبل طباعة أي خرج، والذي عادة يكون بالأمر echo أو print) حتى لو كان فراغاً واحداً. العادة أن يوضع في بداية البرنامج النصي مباشرة.


معلومات مهمة

* فهمنا أن جلسة تعني زيارة واحدة لموقع ما من شخص واحد، لو زار هذا الشخص الموقع مرة أخرى غداً فهذه جلسة أخرى.
* تبقى الجلسة حتى لو فتح الزائر الموقع في صفحات عديدة من متصفحه. وتنتهي إذا أقفل صفحات المتصفح. أي أن الزائر إذا أقفل صفحة المتصفح ثم زار الموقع مرة أخرى فهذه جلسة أخرى.
* تعطى كل جلسة رقماً مميزاً (عادة يكون رقماً عشوائياً طويلاً حتى تضعف إمكانية تكرره وكذلك يصعب تذكره) ويتم إنشاء ملف يبدأ بـ sess_ داخل المجلد المخصص لحفظ بيانات الجلسات داخله.
* كذلك يكون لكل جلسة اسم (عبارة عن متغير قيمته هي الرقم المميز للجلسة أعلاه). وعادة يكون هذا الاسم عاماً لجميع الزوار الموقع ... وهو في الحقيقة محدد بشكل افتراضي داخل ملف php.ini على أنه PHPSESSION، لكن يمكنك تغييره إن أحببت من داخل البرنامج النصي نفسه (طبعاً بدون أن يؤثر هذا على اسم الجلسة الافتراضي الموجود في php.ini). طبعاً تستطيع تغيير اسم المتغير داخل ملف php.ini إن أردت مباشرة. أصدر هذا الأمر قبل بدء الجلسة وإلا كان اسم الجلسة هو الاسم الافتراضي.
* يتم تحديد المجلد الخاص بحفظ بيانات الجلسات في ملف php.ini، لكن يمكنك تغييره من داخل البرنامج النصي نفسه، فقط قم بتغيير مسار المجلد قبل إصدار أمر بدء الجلسة.


تحذيرات بشأن استخدام الجلسة ...

* لا تقم بوضع معلومات حساسة في متغير الجلسة حيث أنه يمكن لأصحاب المواقع الأخرى على المزود (السيرفر SERVER) (في حالة الاستضافة HOTING المشتركة) أن يصلوا إلى المجلد الذي يتم حفظ معلومات الجلسات بداخله.
* سيبقى ملف الجلسة داخل مجلد حفظ بيانات الجلسات حتى لو انتهت الحاجة إليه إلا إذا قمنا بحفه يدوياً. ويمكن أن يشكل هذا تهديداً في حال لم يتم حذف المتغيرات من الجلسة كما تم توضيحه أعلاه وهذا ما يسمى في المواقع أو البريد الإلكتروني بـ توقيع الخروج. في حالة حذف المتغيرات من الجلسة يبقى ملف الجلسة الذي يكون اسمه هكذا مثلاً (sess_fg64sdji94yh0965jh7hf4) فارغاً لكنه لا يحذف إلا يدوياً كما قلت.

........
للاستزادة حول هذا ... يرجى مراجعة دليل php.


اتمنى ان يحوز هذا الدرس مفصل على رضاكم

مع تمنياتي لكم با الصحة والتوفيق ان شاء الله

تحياتي عرب سوفتhttp://www.dzbatna.com/images/smilies/cupidarrow.gif

جميع الحقوق محفوظة لدى الاخي العزيز أبو مصعب






ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى