SlideShare a Scribd company logo
1 of 9
Download to read offline
‫الر‬ ‫هللا‬ ‫بسم‬‫ح‬‫الرحيم‬ ‫من‬
‫الجلسات‬ ‫عن‬ ‫الدرس‬ ‫الٌوم‬(Session)
‫هو‬ ‫الدرس‬ ‫بهذا‬ ‫سنأخذه‬ ‫ما‬:
ً‫ه‬ ‫ما‬‫الجلسات‬(Session)
‫استخدام‬ ‫وراء‬ ‫الحاجة‬Session
‫مع‬ ‫التعامل‬ ‫كٌفٌة‬Session
‫الصف‬ ‫طرق‬HttpSession
‫الكوكٌز‬ ‫بٌن‬ ‫الفرق‬(Cookie)‫والجلسات‬(Session)
‫المستعر‬ ‫جلسات‬ ‫بٌن‬ ‫الفرق‬ً‫الكوك‬ ‫أو‬ ‫ض‬(Session Cookie)‫السٌرفر‬ ‫جلسات‬ ‫و‬(Session)
ً‫توضٌح‬ ‫مثال‬‫الجلسات‬ ‫عن‬
‫الجلسات‬ ‫استخدام‬ ‫عن‬ ‫مثال‬(Session)‫التسوق‬ ‫عربة‬ ً‫ف‬
‫التدرٌب‬ ‫أجل‬ ‫من‬ ‫واجبات‬
‫الجلسات‬ ‫هي‬ ‫ما‬(Session):
‫الـ‬Session‫ذا‬ ً‫ف‬ ‫به‬ ‫ٌحتفظ‬ ‫هو‬ ‫ولكن‬ ‫وقٌمة‬ ‫اسم‬ ‫ٌحمل‬ ‫فهو‬ ً‫الكوك‬ ‫ٌشبه‬ ‫شًء‬ ‫عن‬ ‫عبارة‬ ً‫ه‬‫السٌرفر‬ ‫كرة‬
‫الـ‬ ‫وٌربط‬Session‫عبر‬ ‫العمٌل‬ ‫بجهاز‬ID‫الـ‬ ‫وعمر‬Session‫المستعرض‬ ‫فاتح‬ ‫مازلت‬ ‫أنك‬ ‫طالما‬ ‫هو‬
‫استخدام‬ ‫وراء‬ ‫الحاجة‬Session:
‫لـ‬Session‫استخدمها‬ ‫جاء‬ ‫لكن‬ ‫كثٌر‬ ‫استخدامات‬‫الصعبات‬ ‫بعض‬ ‫ظهور‬ ‫بعد‬‫البٌانات‬ ‫حفظ‬ ً‫ف‬‫داخل‬ ‫تنقلك‬ ‫أثناء‬
‫فعلى‬ ‫موقع‬‫كان‬ ‫لو‬ ‫المثال‬ ‫سبٌل‬‫قبل‬ ‫بشرابه‬ ‫قمت‬ ‫ما‬ ‫حفظ‬ ‫للسٌرفر‬ ‫ٌمكن‬ ‫فكٌف‬ ‫اإلنترنت‬ ‫على‬ ‫تسوق‬ ‫موقع‬ ‫لدٌنا‬
‫بروتوكول‬ ‫إمكانٌات‬ ‫إلى‬ ‫نظرنا‬ ‫لو‬ ‫ولكن‬ ‫بسٌط‬ ‫األمر‬ ‫تجد‬ ‫قد‬ ‫المشترٌات‬ ‫الفاتورة‬ ‫ودفع‬ ‫الموقع‬ ‫من‬ ‫خروجك‬
HTTP‫لذا‬ ‫معقد‬ ‫األمر‬ ‫ستجد‬‫أجل‬ ‫من‬ ‫اقتراحات‬ ‫عدة‬ ‫جاءت‬‫المشكلة‬ ‫هذه‬ ‫حل‬:1-ٌ‫الكوك‬ ‫طرٌق‬ ‫عن‬‫ز‬,2-‫عن‬
‫ط‬‫الرابط‬ ً‫ف‬ ‫القٌم‬ ‫وضع‬ ‫رٌق‬,3-‫الـ‬ ‫تاغ‬ ‫طرٌق‬ ‫عن‬html‫نموذج‬(form)ً‫المخف‬(hidden.)‫ممكن‬ ‫ذكرناه‬ ‫وما‬
‫الجلسات‬ ‫مبدأ‬ ‫ٌحل‬ ‫أن‬.
‫الكوكيز‬
‫الـ‬ ‫تخزٌن‬ ‫أجل‬ ‫من‬ ‫الكوكٌز‬ ‫استخدام‬ ‫ٌمكنك‬ID‫الحق‬ ‫اتصال‬ ‫كل‬ ‫مع‬ ً‫اإللكترون‬ ‫التسوق‬ ‫جلسة‬ ً‫ف‬,‫وٌمكنك‬
‫الـ‬ ‫عن‬ ‫البحث‬ID‫وتستخدم‬ ‫الحالٌة‬ ‫للجلسة‬‫الـ‬ID‫المعلوما‬ ‫استخراج‬ ‫أجل‬ ‫من‬‫جهاز‬ ‫على‬ ‫البحث‬ ‫جدول‬ ‫من‬ ‫ت‬
‫الخادم‬.‫جدولٌن‬ ‫الحقٌقة‬ ً‫ف‬ ‫فهناك‬:‫الـ‬ ‫معرفات‬ ‫ٌحمل‬ ‫جدول‬ ‫األول‬ID‫المستخدمٌن‬ ‫جدول‬ ‫مع‬ ‫المرتبط‬,‫وجدول‬
‫بالمستخدمٌن‬ ‫الخاصة‬ ‫البٌانات‬ ‫تخزٌن‬ ‫أجل‬ ‫من‬ ‫المخصص‬ ‫المستخدمٌن‬.
‫السر‬ ‫باستخدام‬ ‫ما‬ ‫طلب‬ ‫أخذ‬ ‫أردنا‬ ‫لو‬ ‫المثال‬ ‫سبٌل‬ ‫على‬‫فلت‬:
String sessionID = makeUniqueString();
HashMap sessionInfo = new HashMap();
HashMap globalTable = findTableStoringSessions();
globalTable.put(sessionID, sessionInfo);
Cookie sessionCookie = new Cookie("JSESSIONID", sessionID);
sessionCookie.setPath("/");
response.addCookie(sessionCookie);
‫التجزبة‬ ‫جدول‬ ‫باستخدام‬ ‫المخدم‬ ‫بطلب‬ ‫بعد‬ ‫فٌما‬ ‫تقوم‬ ‫أنت‬(hash table)globalTable‫ٌجدول‬ ‫لربطه‬‫التجزبة‬
(hash table)sessionInfo‫الـ‬ ‫بواسطة‬ID‫تصل‬ ‫وهكذا‬ ‫العمٌل‬ ‫إلى‬ ‫بإرساله‬ ‫قمت‬ ‫الذي‬ ً‫الكوك‬ ‫خالل‬ ‫من‬
‫المح‬ ‫بالعمٌل‬ ‫الخاصة‬ ‫للبٌانات‬‫دد‬.
‫الكوكٌز‬ ‫استخدام‬‫الطرٌقة‬ ‫هذه‬ ً‫ف‬‫الحل‬ ‫هو‬‫و‬ ‫الممتاز‬‫النهج‬ ‫هو‬‫استخداما‬ ‫األكثر‬‫مع‬ ‫للتعامل‬‫الجلسات‬(Session).
,‫ذلك‬ ‫ومع‬‫الجمٌل‬ ‫فمن‬‫أن‬‫تطبٌق‬ ‫لها‬ ‫ٌكون‬‫سٌرفلٌت‬‫أجل‬ ‫من‬ ً‫عال‬ ‫مستوى‬ ‫على‬‫أن‬‫كل‬ ‫ٌعالج‬‫هذا‬‫المهام‬
‫إلى‬ ‫باإلضافة‬‫التالٌة‬ ‫المهام‬‫الشكل‬ ‫بهذا‬ ‫تطبٌقها‬ ‫الصغب‬:
‫ا‬‫الـ‬ ‫قٌمة‬ ‫حمل‬ ‫الذي‬ ً‫الكوك‬ ‫ستخراج‬ID‫العمٌل‬ ‫جهاز‬ ‫على‬ ‫الموجودة‬ ‫الكوكٌز‬ ‫جمٌع‬ ‫ضمن‬ ‫من‬
‫انتهت‬ ً‫الت‬ ‫الجلسات‬ ‫تحدٌد‬
‫التجزبة‬ ‫جدول‬ ‫ربط‬(hash table)‫الطلبات‬ ‫كل‬ ‫مع‬
‫تولد‬ID‫فرٌد‬‫معه‬ ‫الجلسة‬ ‫فتح‬ ‫أجل‬ ‫من‬ ‫للعمٌل‬ ‫إعطابه‬ ‫أجل‬ ‫من‬
‫مالحظة‬:‫التجزبة‬ ‫جدول‬ ‫هو‬ ‫ما‬(hash table)
‫جدول‬‫التجز‬‫أو‬ ‫بة‬ً‫ف‬ ‫أما‬ ‫الخانة‬ ‫رقم‬ ‫هو‬ ‫العنصر‬ ‫دلٌل‬ ‫المصفوفة‬ ‫ولكن‬ ‫بالمصفوفة‬ ‫أشبه‬ ‫هو‬ ‫التقطٌع‬ ‫جدول‬
‫فرٌد‬ ‫أسم‬ ‫له‬ ‫ٌكون‬ ‫دلٌل‬ ‫فكل‬ ‫محرفٌة‬ ‫سلسلة‬ ‫ٌكون‬ ‫هو‬ ‫مفتاح‬ ‫عن‬ ‫عبارة‬ ‫وهو‬ ‫عنصر‬ ‫كل‬ ‫دلٌل‬ ‫فأن‬ ‫التقطٌع‬ ‫الجدول‬
‫وسوف‬ ‫األخرى‬ ‫الخانة‬ ‫عن‬‫أعرض‬‫بٌنهما‬ ‫االختالف‬ ‫لتوضٌح‬ ‫مثال‬.
‫عادٌة‬ ‫مصفوفة‬
0 1 2 3 4
‫التقطٌع‬ ‫جدول‬
Anas key anything anyKey 12ab
‫الخانة‬ ‫مفتاح‬ ‫ٌسمى‬ ‫االسم‬ ‫هذا‬ ‫رقمها‬ ‫ولٌس‬ ‫الخانة‬ ‫اسم‬ ‫عبر‬ ‫خانة‬ ‫أي‬ ‫إلى‬ ‫الوصول‬ ‫تستطٌع‬ ‫التقطٌع‬ ‫جدول‬ ‫إذا‬
‫الرابط‬ ‫صياغة‬ ‫إعادة‬(URL)
‫ف‬ ‫المعلومات‬ ‫بعض‬ ‫إلحاق‬ ‫تستطٌع‬ ‫الطرٌقة‬ ‫بهذه‬‫العنوان‬ ‫نهاٌة‬ ً(URL)‫المعلومات‬ ‫بعض‬ ‫وضع‬ ‫وتستطٌع‬
‫المعرف‬ ‫مع‬ ‫الخادم‬ ‫وربط‬ ‫بالجلسة‬ ‫الخاصة‬(ID)‫الشكل‬ ‫مع‬ ‫المثال‬ ‫سبٌل‬ ‫فعلى‬ ‫بالمستخدم‬ ‫الخاص‬
http://host/path/file.html;jsessionid=a1234‫بالرا‬ ‫مرفق‬ ‫الجلسة‬ ‫معرف‬‫وهو‬ ‫بط‬jsessionid=a1234,‫القيمة‬ ‫أن‬
a1234‫بالمستخدمٌن‬ ‫المرتبط‬ ‫البٌانات‬ ‫جدول‬ ‫أجل‬ ‫من‬ ‫فرٌد‬ ‫معرف‬.‫هذا‬‫األسلوب‬‫دور‬ ‫للعب‬ ‫ما‬ ً‫ا‬‫نوع‬ ‫جٌد‬
‫الجلسة‬,‫ٌدعم‬ ‫ال‬ ‫المتصفح‬ ‫كان‬ ‫إذا‬ ‫مٌزة‬ ‫ولدٌه‬‫المستخدم‬ ‫كان‬ ‫إذا‬ ‫أو‬ ‫الكوكٌز‬‫قام‬‫جهازه‬ ‫على‬ ‫الكوكٌز‬ ‫بتعطٌل‬.
‫األسلوب‬ ‫هذا‬ ‫المقابل‬ ً‫ف‬ ‫ولكن‬‫ل‬‫بها‬ ‫القٌام‬ ‫صعب‬ ‫المعالجة‬ ‫عملٌة‬ ‫أن‬ ‫أي‬ ‫الكوكٌز‬ ً‫ف‬ ‫كان‬ ‫كما‬ ‫عٌب‬ ‫دٌه‬.
‫كل‬ ‫مع‬ ‫جدا‬ ‫حذر‬ ‫تكون‬ ‫أن‬ ‫ٌجب‬ ‫أنك‬ ‫إلى‬ ‫ذكرنها‬ ً‫الت‬ ‫األمور‬ ‫معالجة‬ ً‫ف‬ ‫المستوى‬ ً‫عال‬ ‫تطبٌق‬ ‫وجود‬ ‫مع‬ ‫حتى‬
‫بك‬ ‫الخاص‬ ‫الموقع‬ ‫إلى‬ ‫ٌشر‬ ‫رابط‬‫المستخدم‬ ‫إلى‬ ‫ترسله‬ ‫سوف‬ ‫الذي‬.
‫المخفية‬ ‫النماذج‬ ‫حقول‬
‫حقول‬ ‫نستخدم‬ ‫سوف‬ ‫هنا‬ً‫ف‬ ‫المخفٌة‬ ‫النماذج‬HTMLً‫ٌل‬ ‫كما‬ ‫ٌكون‬ ‫وذلك‬ ‫بالجلسة‬ ‫تتعلق‬ ً‫الت‬ ‫قٌم‬ ‫لوضع‬:
<INPUT TYPE="HIDDEN" NAME="session" VALUE="a1234">
‫كبٌرا‬ ‫مساوئ‬ ‫األسلوب‬ ‫لهذا‬ ‫ولكن‬ ‫بالجلسة‬ ‫تتعلق‬ ً‫الت‬ ‫القٌم‬ ‫وضع‬ ً‫ف‬ ‫المخفٌة‬ ‫الحقول‬ ‫نستخدم‬ ‫فأننا‬ ‫نكرنا‬ ‫كمت‬
‫من‬ ‫حٌوي‬ ‫بشكل‬ ‫الصفحة‬ ‫أنشاء‬ ‫علٌك‬ ً‫ه‬‫نم‬ ‫كل‬ ‫أجل‬ً‫مخف‬ ‫وذج‬ً‫تشعب‬ ‫رابط‬ ‫على‬ ‫بالضغط‬ ‫قمت‬ ‫إذا‬ ‫و‬
(<A HREF...>..</a>)‫الق‬ ‫فإن‬‫تضٌع‬ ‫وسوف‬ ‫تخزن‬ ‫لن‬ ‫النماذج‬ ً‫ف‬ ‫ٌم‬.‫د‬ ‫األسلوب‬ ‫لهذا‬ ً‫ف‬ ‫نرى‬ ‫ال‬ ‫لذالك‬‫ا‬‫عم‬
‫الجلسات‬ ‫أجل‬ ‫من‬ ‫قوي‬(session tracking.)
‫السرفلت‬ ‫في‬ ‫الجلسات‬
‫توف‬ ‫السرفلت‬‫الجلسات‬ ‫أجل‬ ‫من‬ ‫مستحق‬ ‫حل‬ ‫لك‬ ‫ر‬(session-tracking)‫هو‬:‫التطبٌق‬HttpSession.
‫من‬ ‫أعلى‬ ‫المستوى‬ ‫عالٌة‬ ‫واجها‬ ‫بناء‬ ‫تم‬ ‫التطبٌق‬ ‫هذا‬ ً‫ف‬‫الرابط‬ ‫صٌغة‬ ‫إعادة‬ ‫و‬ ‫الكوكٌز‬ ‫فكرة‬(URL.)‫كل‬ ً‫ا‬ٌ‫وحال‬
‫الجلسات‬ ‫طلب‬ ‫تدعم‬ ‫المخدمات‬.
‫مع‬ ‫التعامل‬ ‫كيفية‬Session:
‫مو‬ ‫اآلن‬ ً‫أعط‬ ‫وسوف‬ ‫أساسٌة‬ ‫خطوات‬ ‫أربع‬ ‫وٌشمل‬ ‫وصرٌح‬ ‫وضح‬ ‫السرفلت‬ ً‫ف‬ ‫الجلسات‬ ‫استخدام‬‫عنها‬ ‫جز‬
‫بالتفصٌل‬ ‫واحد‬ ‫كل‬ ‫أشرح‬ ‫سوف‬ ‫وبعدها‬:
1-‫استدعاء‬ ‫أجل‬ ‫من‬‫غرض‬‫الـ‬Sessionً‫التال‬ ‫بطرٌقة‬ ‫ٌتم‬:
HttpSession session = request.getSession();
2-‫من‬ ‫قٌم‬ ‫استدعاء‬ ‫أجل‬ ‫من‬Session:
SomeClass value = (SomeClass) session.getAttribute("someIdentifier");
‫الطرٌقة‬ ‫تعٌد‬getAttribute‫نمط‬ ‫من‬ ‫قٌمة‬Object‫ترٌده‬ ‫أنت‬ ‫الذي‬ ‫النمط‬ ‫إلى‬ ‫قصرها‬ ‫وٌتم‬
3-‫الـ‬ ً‫ف‬ ‫قٌمة‬ ‫وضع‬ ‫أجل‬ ‫من‬Session:
value = new SomeClass(...);
session.setAttribute("someIdentifier", value);
‫الـ‬ ً‫ف‬ ‫توضع‬ ً‫الت‬ ‫القٌمة‬ ً‫ا‬‫أٌض‬Session‫بسٌط‬ ‫نمط‬ ‫ولٌس‬ ‫غرض‬ ُ‫ا‬‫أٌض‬
4-‫من‬ ‫قٌم‬ ‫إزالة‬ ‫أجل‬ ‫من‬‫الـ‬Session:
‫من‬ ‫قٌم‬ ‫إزالة‬ ‫أجل‬ ‫من‬ ‫طرق‬ ‫ثالث‬ ‫هناك‬‫الـ‬Session
‫الغرض‬ ‫فأن‬ ‫ذكرنا‬ ‫كما‬session‫الصف‬ ‫من‬HttpSession‫تقطٌع‬ ‫جدول‬ ‫هو‬(hash table.)
‫بالتفصٌل‬ ‫واحدة‬ ‫كل‬ ‫إلى‬ ً‫تأت‬ ‫اآلن‬.
‫استدعاء‬‫غرض‬‫الـ‬Session
‫الكابن‬Session‫النمط‬ ‫من‬ ‫هو‬HttpSession,‫ج‬ ‫عن‬ ‫عبارة‬ ‫هو‬ ‫األساس‬ ً‫ف‬ ‫لكنه‬‫تقطٌع‬ ‫دول‬(hash table)
‫عنه‬ ‫سابقة‬ ‫مالحظة‬ ً‫ف‬ ‫ذكرنها‬ ‫ولقد‬.‫من‬ ‫كابن‬ ‫على‬ ‫الحصول‬ ‫أجل‬ ‫من‬HttpSession‫باستدعاء‬ ‫ٌتم‬ ‫فذالك‬
‫الطرٌقة‬getSession‫من‬HttpServletRequestً‫ٌل‬ ‫كما‬ ‫ٌتم‬ ‫ولذك‬:
HttpSession session = request.getSession();
‫الـ‬ ‫استخراج‬ ً‫ف‬ ‫ٌحصل‬ ‫ما‬ ‫الحقٌقة‬ ً‫ف‬ID‫الخا‬ً‫ف‬ ‫مرفقة‬ ‫معلومات‬ ‫أو‬ ً‫كوك‬ ‫طرٌق‬ ‫عن‬ ‫أما‬ ‫ٌتم‬ ‫بالمستخدم‬ ‫ص‬
‫العنوان‬(URL),‫الـ‬ ‫ٌستخدم‬ ‫ثم‬ID‫الصف‬ ً‫ف‬ ‫األغراض‬ ‫جدول‬ ً‫ف‬ ‫كمفتاح‬HttpSession‫إنشاءه‬ ‫تم‬ ‫الذي‬
ً‫ا‬‫مسبق‬,‫للم‬ ‫بالنسبة‬ ‫شفاف‬ ‫بشكل‬ ‫ٌجري‬ ‫هذا‬ ‫كل‬ ‫ولكن‬‫برمج‬:‫لطرٌقة‬ ‫استدعابك‬ ‫بمجرد‬ ‫فأنت‬getSession‫لم‬ ‫إذا‬
‫ال‬ ‫على‬ ‫العثور‬ ‫ٌتم‬‫ـ‬ID‫العنوان‬ ‫مع‬ ‫مرفق‬ ‫وال‬ ً‫الكوك‬ ‫ملف‬ ً‫ف‬ ‫بالجلسة‬ ‫الخاص‬(URL)‫جلسة‬ ‫ٌخلق‬ ‫النظام‬ ‫فأن‬
‫فارغة‬ ‫جدٌدة‬,‫العمٌل‬ ‫جهاز‬ ً‫ف‬ ً‫الكوك‬ ‫استخدام‬ ‫ٌتم‬ ‫كان‬ ‫وإذا‬(ً‫أفتراض‬ ‫الوضع‬ ‫هذا‬)‫بإنشاء‬ ‫ٌقوم‬ ‫النظام‬ ‫فأن‬
‫اسمه‬ ً‫كوك‬JSESSIONIDً‫ه‬ ‫وقٌمته‬ID‫بالجلسة‬ ‫خاصة‬ ‫فرٌدة‬ ‫قٌمة‬ ً‫وه‬.‫ب‬ ‫نجد‬ ‫سبق‬ ‫مما‬ ‫إذا‬‫ممكن‬ ‫أن‬
‫بالطرٌقة‬ ‫الجلسة‬ ‫االستدعاء‬ ‫عملٌة‬ ‫تتاثر‬ ‫أن‬ ‫الممكن‬request.getSession()‫عملٌة‬ ‫فأن‬ ‫هذا‬ ‫على‬ ‫وبناء‬
‫الـ‬ ً‫ف‬ ‫قٌم‬ ‫أي‬ ‫وضع‬ ‫ٌمكن‬ ‫عندما‬ ‫تحصل‬ ‫االستدعاء‬HTTP response headers‫أر‬ ‫قبل‬ ‫وذلك‬‫محتوى‬ ‫أي‬ ‫سال‬
‫للعمٌل‬ ‫للوثٌقة‬.
‫الن‬ ‫بغض‬ ‫الجلسة‬ ً‫ف‬ ‫بٌانات‬ ‫تضع‬ ‫أن‬ ‫ترٌد‬ ‫كنت‬ ‫إذا‬ ‫اآلن‬‫ال‬ ‫أما‬ ‫السابق‬ ً‫ف‬ ‫بٌانات‬ ‫تحتوي‬ ‫الجلسة‬ ‫كان‬ ‫إذا‬ ‫ظر‬
ً‫األت‬ ‫بالشكل‬ ‫استدعاء‬ ‫فعلٌك‬ ‫بٌانات‬ ‫أي‬ ‫على‬ ‫تحوي‬:request.getSession(true)‫نفس‬ ‫تكافا‬ ً‫وه‬
‫االستدعاء‬request.getSession()‫أنها‬ ‫على‬ ‫القٌم‬ ‫ٌأخذ‬ ً‫ا‬ٌ‫إفتراض‬ ‫إذا‬true‫ألنه‬ ‫مناسب‬ ‫االستدعاء‬ ‫هذا‬
‫لم‬ ‫إذا‬ ‫جدٌدة‬ ‫جلسة‬ ‫ٌنشا‬ ‫سوف‬‫بالفعل‬ ‫موجودة‬ ‫جلسة‬ ‫هناك‬ ‫ٌكون‬.‫الجلسة‬ ‫محتوى‬ ‫طباعة‬ ‫فقط‬ ‫ترٌد‬ ‫كنت‬ ‫حال‬ ً‫ف‬
ً‫التال‬ ‫باستدعاء‬ ‫تقوم‬ ‫فهنا‬request.getSession(false)ً‫ف‬ ‫جدٌدة‬ ‫جلسة‬ ‫إنشاء‬ ‫إلى‬ ‫بحاجة‬ ‫لست‬ ‫أنت‬ ‫هنا‬
‫القٌم‬ ‫بوضع‬ ‫قمت‬ ‫أنت‬ ‫إذا‬ ‫قٌم‬ ‫هناك‬ ‫تكن‬ ‫لم‬ ‫حال‬true‫تقوم‬ ‫فأنت‬ ‫االستدعاء‬ ً‫ف‬‫ل‬ ‫عملٌات‬ ً‫ف‬ ‫االسراف‬ ً‫ف‬‫ٌس‬
‫تسوق‬ ‫لعربة‬ ‫المشترٌات‬ ‫قابمة‬ ‫عرض‬ ً‫ف‬ ‫المثال‬ ‫سبٌل‬ ‫على‬ ‫ٌفٌدنا‬ ‫االستدعاء‬ ً‫ف‬ ‫االسلوب‬ ‫هذا‬ ً‫داع‬ ‫أي‬ ‫لدٌها‬
‫ذالك‬ ‫على‬ ‫بسٌط‬ ‫مثال‬ ‫نعرض‬ ‫واآلن‬ ‫إلكترونٌة‬:
HttpSession session = request.getSession(false);
if (session == null) {
// ‫بطباعة‬ ‫قم‬‫رسالة‬‫ال‬ ‫عربة‬ ً‫ف‬ ‫شًء‬ ‫ٌوجد‬ ‫ال‬ ‫أنه‬‫تسوق‬
} else {
//‫المشترٌات‬ ‫قابمة‬ ‫بطباعة‬ ‫قم‬
}
‫مالحظة‬:‫استدعاء‬ ‫علٌك‬request.getSession‫قبل‬‫إرسال‬‫للعمٌل‬ ‫للوثٌقة‬ ‫محتوى‬ ‫أي‬
‫من‬ ‫قيم‬ ‫استدعاء‬Session
‫لصف‬ ‫التابعة‬ ‫األغراض‬ ‫أن‬HttpSession‫أنما‬ ‫الشبكة‬ ‫عبر‬ ‫وتعود‬ ‫تذهب‬ ‫ال‬ ‫فٌه‬ ‫السٌرفر‬ ‫على‬ ‫تعم‬ ‫تكون‬
‫بشكل‬ ‫مرتبطة‬ ‫الحقٌقة‬ ً‫ف‬ ً‫ه‬ً‫ف‬ ‫مرفقة‬ ‫معلومات‬ ‫أو‬ ً‫الكوك‬ ‫طرٌق‬ ‫عن‬ ‫العمالء‬ ‫مع‬ ً‫ا‬ٌ‫تلقاب‬
‫العنوان‬(URL)‫تقطٌع‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ً‫ه‬ ‫الجلسة‬ ‫بنٌة‬ ‫وأن‬ ‫أسلفنا‬ ‫وكما‬(hash table).‫أجل‬ ‫ومن‬
‫الطرٌقة‬ ‫بواسطة‬ ‫الجلسة‬ ً‫ف‬ ‫سابقا‬ ‫موجودة‬ ‫قٌمة‬ ‫على‬ ‫الحصول‬session.getAttribute("key")‫وتعٌد‬
‫نمط‬ ‫من‬ ‫قٌمة‬ ‫الطرٌقة‬ ‫هذا‬ ‫لنا‬Object,‫قصر‬ ‫علٌك‬ ‫لذالك‬‫علٌه‬ ‫كان‬ ‫الذي‬ ‫النمط‬ ‫إلى‬ ‫النمط‬.‫وٌعٌد‬null
‫عن‬ ‫تبحث‬ ‫الذي‬ ‫للمفتاح‬ ‫قٌمة‬ ‫ٌوجد‬ ‫ال‬ ‫أو‬ ‫الجلسة‬ ً‫ف‬ ‫موجود‬ ‫عنه‬ ‫تبحث‬ ‫الذي‬ ‫المفتاح‬ ‫ٌكن‬ ‫لم‬ ‫حال‬ ً‫ف‬
‫قٌمته‬,‫بها‬ ‫المرجعة‬ ‫القٌم‬ ‫كان‬ ‫إذا‬ ‫فٌما‬ ‫التحقق‬ ‫علٌك‬ ‫لذالك‬null‫ال‬ ‫أو‬.‫المثال‬ ‫سبٌل‬ ‫وفعال‬:
HttpSession session = request.getSession();
SomeClass value = (SomeClass) session.getAttribute("someIdentifier");
if (value == null) { // No such object already in session
value = new SomeClass(...);
session.setAttribute("someIdentifier", value);
}
doSomethingWith(value);
ً‫الت‬ ‫المفاتٌح‬ ‫كل‬ ‫على‬ ‫الحصول‬ ‫أردت‬ ‫حال‬ ً‫ف‬ ‫ولكن‬ ‫عنها‬ ‫البحث‬ ‫ترٌد‬ ً‫الت‬ ‫القٌم‬ ‫تعرف‬ ‫أنت‬ ‫الحاالت‬ ‫معظم‬ ً‫ف‬
‫باستدعاء‬ ‫فقم‬ ‫الجلسة‬ ً‫ف‬getAttributeNames‫نمط‬ ‫من‬ ‫غرض‬ ‫لنا‬ ‫تعٌد‬ ً‫والت‬Enumeration.
‫الـ‬ ‫في‬ ‫قيمة‬ ‫وضع‬Session
‫فعلٌك‬ ‫قٌم‬ ‫على‬ ‫الحصول‬ ‫أجل‬ ‫فمن‬ ‫السابق‬ ً‫ف‬ ‫تحدثنا‬ ‫كما‬‫الطرٌقة‬ ‫استخدام‬ getAttribute ‫وضع‬ ‫أجل‬ ‫ومن‬
‫الطرٌقة‬ ‫استخدم‬ ‫الجلسة‬ ً‫ف‬ ‫قٌمة‬setAttribute ‫للجلسة‬ ‫قيمة‬ ‫اضافة‬ ‫عن‬ ‫مثال‬ ‫أعرض‬ ‫سوف‬
HttpSession session = request.getSession();
SomeClass value = (SomeClass) session.getAttribute("someIdentifier");
if (value == null) { // No such object already in session
value = new SomeClass(...);
session.setAttribute("someIdentifier", value);
}
doSomethingWith(value);
‫بسٌطة‬ ‫قٌمة‬ ‫ولٌست‬ ‫غرض‬ ً‫ه‬ ‫القٌم‬ ‫تكون‬ ‫أن‬ ‫وٌجب‬
‫قيم‬ ‫إزالة‬‫الـ‬Session
‫الجلسة‬ ‫من‬ ‫قٌم‬ ‫إزالة‬ ‫أجل‬ ‫من‬ ‫طرق‬ ‫ثالث‬ ‫هناك‬ ‫ذكرنا‬ ‫كما‬
1-‫إل‬‫بننااه‬ ‫قمت‬ ‫الذ‬ ‫السرفلت‬ ‫في‬ ‫فقط‬ ‫قيمة‬ ‫زالة‬‫باستدعاء‬ ‫فعلٌك‬removeAttribute("key")
‫الجلسة‬ ً‫ف‬ ‫قٌمته‬ ‫مع‬ ‫المفتاح‬ ‫بإزالة‬ ‫تقوم‬ ‫هنا‬.ً‫ال‬‫واستعما‬ ً‫ا‬‫شٌوع‬ ‫األكثر‬ ‫األسلوب‬ ‫وهذا‬.
2-‫الجلسة‬ ‫قيم‬ ‫كل‬ ‫إلزالة‬(‫الوي‬ ‫تطبيق‬ ‫ضمن‬‫ب‬‫الحالي‬)‫الطرٌقة‬ ‫باستدعاء‬ ‫قم‬invalidate‫لمسح‬
‫بأكمل‬ ‫الجلسة‬‫فقط‬ ‫لٌس‬ ‫الجلسة‬ ‫البٌانات‬ ‫جمٌع‬ ‫مسح‬ ‫على‬ ‫ٌقوم‬ ‫سوف‬ ‫ألجراء‬ ‫هذا‬ ‫أن‬ ‫تعرف‬ ‫أن‬ ‫علٌك‬ ‫ها‬
‫صفحة‬ ‫أو‬ ‫السرفلت‬ ‫على‬jsp‫والصفحات‬ ‫السرفلتات‬ ‫كل‬ ً‫ف‬ ‫الجلسة‬ ‫بٌانات‬ ‫جمٌع‬ ‫مسج‬ ‫على‬ ‫سٌقوم‬ ‫أنما‬
jsp‫التطبٌق‬ ‫هذا‬ ‫ضمن‬.
‫ب‬ ‫الخاصة‬ ‫البيانات‬ ‫جميع‬ ‫ومسح‬ ‫للمستخدم‬ ‫خروج‬ ‫تسجيل‬‫باستدعاء‬ ‫قم‬ ‫هذا‬ ‫أجل‬ ‫من‬‫الطرٌقة‬logout‫وهذه‬
‫تدعم‬ ً‫الت‬ ‫السرفرات‬ ‫من‬ ‫مدعومة‬ ‫الطرٌقة‬‫إصدار‬2.4‫و‬ ‫للسرفلت‬2.2‫الـ‬ ‫لصفحات‬jsp‫تأثر‬ ‫ال‬ ‫الطرٌقة‬ ‫هذه‬
‫األخرى‬ ‫السرفلتات‬ ‫على‬.
‫طرق‬‫الصف‬HttpSession:
‫أعرض‬ ‫سوف‬ ‫اآلن‬‫ملخص‬‫ل‬‫الطرقة‬ ‫كل‬‫الموجودة‬‫الصف‬ ً‫ف‬HttpSession
public Object getAttribute(String name)
‫الجلسة‬ ً‫ف‬ ً‫ا‬‫مسبق‬ ‫مخزنة‬ ‫قٌمة‬ ‫لك‬ ‫تخرج‬ ‫الطرٌقة‬ ‫هذه‬‫شكل‬ ‫على‬Object‫لك‬ ‫وتعٌد‬null‫وجود‬ ‫عدم‬ ‫حال‬ ً‫ف‬
‫عنه‬ ‫تبحث‬ ‫الذي‬ ‫المفتاح‬ ‫باالسم‬ ‫القٌمة‬‫سبق‬ ‫فٌما‬ ‫عنها‬ ‫تكلمنا‬ ‫ولقد‬.
public Enumeration getAttributeNames()
‫و‬ ‫الجلسة‬ ً‫ف‬ ‫المفاتٌح‬ ‫جمٌع‬ ‫أسماء‬ ‫على‬ ‫تحصل‬ ‫الطرٌقة‬ ‫بهذه‬‫شكل‬ ‫على‬ ‫لك‬ ‫ٌعٌدها‬Enumeration.
public void setAttribute(String name, Object value)
‫سبق‬ ‫ما‬ ً‫ف‬ ‫عنها‬ ‫تكلمنا‬ ‫وقد‬ ‫الجلسة‬ ً‫ف‬ ‫قٌمة‬ ‫وضع‬ ‫أجل‬ ‫من‬ ‫الطرٌقة‬ ‫هذه‬
public void removeAttribute(String name)
‫عنها‬ ‫تكلمنا‬ ‫وقد‬ ‫الجلسة‬ ‫من‬ ‫مفتاحها‬ ‫مع‬ ‫قٌمة‬ ‫إزالة‬ ‫أجل‬ ‫من‬ ‫الطرٌقة‬ ‫هذا‬.
public void invalidate()
‫سبق‬ ‫فٌما‬ ‫عنه‬ ‫تكلمنا‬ ‫وقد‬ ‫التطبٌق‬ ‫كل‬ ً‫ف‬ ‫الجلسة‬ ‫قٌم‬ ‫جمٌع‬ ‫مسح‬ ‫على‬ ‫تقوم‬ ‫الطرٌقة‬ ‫هذه‬.
public void logout()
‫بالمستخدم‬ ‫الخاصة‬ ‫الجلسة‬ ً‫ف‬ ‫البٌانات‬ ‫جمٌع‬ ‫بمسح‬ ‫وتقوم‬ ‫للمستخدم‬ ‫خروج‬ ‫تسجٌل‬ ‫بعملٌة‬ ‫تقوم‬ ‫الطرٌقة‬ ‫هذه‬.
public String getId()
ٌ‫الطر‬ ‫هذه‬‫الـ‬ ‫لنا‬ ‫ٌعٌد‬ ‫قة‬ID‫جلسة‬ ‫كل‬ ‫أجل‬ ‫من‬ ‫ٌولد‬ ‫الذي‬.
public boolean isNew()
‫تعٌد‬ ‫الطرٌقة‬ ‫هذا‬true‫لم‬ ‫المستعرض‬ ‫إذا‬‫الجلسة‬ ‫ٌرى‬,‫الجلسة‬ ‫أنشاء‬ ‫تم‬ ‫ٌكون‬ ‫ما‬ ً‫ة‬‫عاد‬ ‫ألنه‬‫للتو‬‫بدل‬ ‫وذالك‬
‫العمٌل‬ ‫من‬ ‫وارد‬ ‫الطلب‬ ‫بواسطة‬ ‫العمٌل‬ ‫إلى‬ ‫الرجوع‬.‫لنا‬ ‫وتعٌد‬false‫الجلسة‬ ‫كانت‬ ‫إذا‬‫موجود‬ً‫ا‬‫مسبق‬ ‫ة‬.
‫السرفلت‬ ‫بزٌارة‬ ‫مستخدمٌن‬ ‫قام‬ ‫إذا‬ ‫معرفة‬ ً‫ف‬ ‫الطرٌقة‬ ‫هذه‬ ‫تفٌدنا‬‫صفحة‬ ‫أو‬jsp‫على‬ ‫ومثال‬ ‫سابقة‬ ‫فترى‬ ً‫ف‬
‫ذالك‬‫ذالك‬ ‫عن‬ ‫ٌعبر‬ ‫الذي‬ ‫الكود‬:
HttpSession session = request.getSession();
if (session.isNew()) {
// ‫أفعل‬‫أي‬‫زٌارة‬ ‫أول‬ ‫اجل‬ ‫من‬ ‫شًء‬
} else {
// ‫شًء‬ ‫أي‬ ‫أفعل‬‫الزابر‬ ‫عودة‬ ‫أجل‬ ‫من‬
}
public long getCreationTime()
‫هذا‬‫ثانٌة‬ ً‫بالملل‬ ‫الوقت‬ ‫تعٌد‬ ‫الطرٌقة‬‫منذ‬‫اللٌل‬ ‫منتصف‬,1ً‫الثان‬ ‫كانون‬1792(‫غرٌنتش‬ ‫بتوقٌت‬)‫إلى‬‫الوقت‬
‫الجلس‬ ‫أنشاء‬ ‫فٌه‬ ‫تم‬ ‫الذي‬‫ة‬.‫قٌمة‬ ‫على‬ ‫للحصول‬‫مفٌدة‬‫للطباعة‬‫قم‬‫ب‬‫القٌمة‬ ‫تمرٌر‬‫الصف‬ ً‫بان‬ ‫إلى‬Date‫أو‬
‫الطرٌق‬‫ة‬setTimeInMillis‫من‬‫الصف‬GregorianCalendar.
public long getLastAccessedTime()
‫اللٌل‬ ‫منتصف‬ ‫منذ‬ ‫ثانٌة‬ ً‫بالمٌل‬ ‫الوقت‬ ‫لنا‬ ‫تعٌد‬ ‫الطرٌقة‬ ‫هذا‬1ً‫الثان‬ ‫كانون‬1792(‫غرٌنتش‬ ‫بتوقٌت‬)‫الوقت‬ ‫إلى‬
‫الجلسة‬ ً‫ف‬ ‫للعمٌل‬ ‫مشاركة‬ ‫أخر‬.
public int getMaxInactiveInterval()
public void setMaxInactiveInterval(int seconds)
‫سواء‬ ‫الطرٌقتان‬ ‫هتان‬set‫أو‬get‫أجل‬ ‫من‬‫بالثانٌة‬ ‫الوقت‬ ‫طول‬
‫والجلسات‬ ‫الكوكيز‬ ‫بين‬ ‫الفرق‬
‫حيث‬ ‫من‬ ‫الفرق‬‫جلسات‬‫الكوكيز‬
‫ماهيت‬‫تقطٌع‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ‫هو‬(hash table)‫صغٌر‬ ‫ملف‬ ‫عن‬ ‫عبارة‬ ‫هو‬
‫الوجود‬ ‫مكان‬‫السٌرفر‬ ‫ذاكرة‬ ً‫ف‬‫جهاز‬ ‫على‬‫المستعرض‬ ‫ذاكرة‬ ً‫ف‬ ‫أو‬ ‫العمٌل‬
‫الزمنية‬ ‫المدة‬‫المستعرض‬ ‫تغلق‬ ‫لم‬ ‫أنك‬ ‫طالما‬‫كالجلسة‬ ‫ٌعمل‬ ‫أو‬ ‫محدد‬ ‫فترة‬ ‫ضمن‬ ‫ٌعمل‬
‫ربط‬ ‫طريقة‬
‫بالمستخدم‬
‫بالعنوان‬ ‫مرفقة‬ ‫معلومات‬ ‫أو‬ ً‫كوك‬ ‫بواسطة‬‫الطلب‬ ‫هٌدر‬ ‫و‬ ‫االستجابة‬ ‫الهٌدر‬ ‫بواسط‬
‫الكوكي‬ ‫أو‬ ‫المستعرض‬ ‫جلسات‬ ‫بين‬ ‫الفرق‬(Session Cookie)‫السيرفر‬ ‫جلسات‬ ‫و‬(Session)
‫حيث‬ ‫من‬ ‫الفرق‬‫السيرفر‬ ‫جلسة‬‫المستعرض‬ ‫جلسة‬
‫ماهيت‬‫تقطٌع‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ‫هو‬(hash table)ً‫كوك‬ ‫عن‬ ‫عبارة‬ ‫هو‬
‫الجلسة‬ ‫وجود‬ ‫مكان‬‫السٌرفر‬ ‫ذاكرة‬ ً‫ف‬‫المستعرض‬ ‫ذاكرة‬ ً‫ف‬
‫الزمنية‬ ‫المدة‬‫المستعرض‬ ‫تغلق‬ ‫لم‬ ‫أنك‬ ‫طالما‬‫المستعرض‬ ‫تغلق‬ ‫لم‬ ‫أنك‬ ‫طالما‬
‫توضيح‬ ‫مثال‬‫ي‬‫الجلسات‬ ‫عن‬
‫السرفلت‬ ‫إلى‬ ‫ٌدخل‬ ‫مرة‬ ‫أو‬ ‫الزابر‬ ‫كان‬ ‫إذا‬ ‫نعرف‬ ‫سوف‬ ‫المثال‬ ‫بهذا‬‫ال‬ ‫أما‬‫الـ‬ ‫فٌه‬ ‫جدول‬ ‫ٌطبع‬ID‫ألول‬ ‫دخوله‬
‫مرة‬(‫الجلسة‬ ‫إنشاء‬ ‫لحظة‬ ‫أي‬)‫هذا‬ ‫كل‬ ً‫ا‬‫طبع‬ ‫السرفلت‬ ‫زٌارة‬ ‫مرات‬ ‫وعدد‬ ‫السرفلت‬ ‫إلى‬ ‫دخول‬ ‫أخر‬ ‫وتارٌخ‬
‫الجلسات‬ ‫باستخدام‬.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
/** Servlet that uses session tracking to keep per-client
* access counts. Also shows other info about the session.
*/
public class ShowSession extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
HttpSession session = request.getSession();
String heading;
Integer accessCount = (Integer) session.getAttribute("accessCount");
if (accessCount == null) {
accessCount = new Integer(0);
heading = "Welcome, Newcomer";
} else {
heading = "Welcome Back";
accessCount = new Integer(accessCount.intValue() + 1);
}
//Integer is an immutable data structure. So, you
//cannot modify the old one in-place. Instead, you
// have to allocate a new one and redo setAttribute.
session.setAttribute("accessCount", accessCount);
PrintWriter out = response.getWriter();
String title = "Session Tracking Example";
String docType ="<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0"+" Transitional//EN">n";
out.println(docType + "<HTML>n" +
"<HEAD><TITLE>" + title + "</TITLE></HEAD>n" +
"<BODY BGCOLOR="#FDF5E6">n" +
"<CENTER>n" +"<H1>" + heading + "</H1>n" +
"<H2>Information on Your Session:</H2>n" +
"<TABLE BORDER=1>n" +"<TR BGCOLOR="#FFAD00">n" +
" <TH>Info Type<TH>Valuen" +"<TR>n" +" <TD>IDn" +
" <TD>" + session.getId() + "n" +"<TR>n" +" <TD>Creation Timen" +
" <TD>" +new Date(session.getCreationTime()) + "n" +
"<TR>n" +" <TD>Time of Last Accessn" +
" <TD>" +new Date(session.getLastAccessedTime()) + "n" +
"<TR>n" +" <TD>Number of Previous Accessesn" +
" <TD>" + accessCount + "n" +"</TABLE>n" +"</CENTER></BODY></HTML>");
}
}
‫تسوق‬ ‫عربة‬ ‫مثال‬‫الجلسات‬ ‫باستخدام‬
‫وأجاص‬ ‫وبرتقال‬ ‫تفاح‬ ً‫ه‬ ‫المشترٌات‬ ‫من‬ ‫قوابم‬ ‫ثالث‬ ‫عرض‬ ‫ٌتم‬ ‫بسٌط‬ ‫مثال‬ ‫هذا‬‫سوف‬ ‫الذي‬ ‫الشًء‬ ‫على‬ ‫تشر‬
‫سرفلت‬ ‫إلى‬ ‫أسالك‬ ‫فٌتم‬ ‫إرسال‬ ‫على‬ ‫تضغط‬ ‫عندما‬ ‫عربة‬ ‫إلى‬ ‫تضٌفه‬Cart‫بشرابه‬ ‫قمت‬ ‫ما‬ ‫ٌضٌف‬ ‫سوف‬ ‫الذي‬
‫سرفلت‬ ‫إلى‬ ‫بإرسالك‬ ‫ٌقوم‬ ‫ثمة‬ ‫ومن‬ ‫الجلسة‬ ‫إلى‬Cart2‫سوف‬ ‫الذي‬‫بشرابه‬ ‫قمت‬ ‫ما‬ ‫ٌعرض‬.
‫صفحة‬ ‫لدٌنا‬ ‫إذا‬html‫وسرفلتان‬Cart‫و‬Cart2
‫صفحة‬html
<HTML>
<HEAD>
<TITLE>Fruits Online</TITLE>
</HEAD>
<BODY bgcolor=#CCffCC>
<CENTER><H1>We have these goodies</H1></CENTER>
<HR>
<FORM ACTION="Cart" METHOD="post">
<TABLE CELLSPACING="5" CELLPADDING="5">
<TR>
<TD ALIGN="center"><B>Add to Cart</B></TD>
<TD ALIGN="center"></TD>
<TD ALIGN="center"></TD>
</TR>
<TR>
<TD ALIGN="center"><INPUT TYPE="Checkbox"
NAME="item_a" VALUE="apple $1"></TD>
<TD ALIGN="left">apple</TD>
</TR>
<TR>
<TD ALIGN="center"><INPUT TYPE="Checkbox"
NAME="item_b" VALUE="orange $2"></TD>
<TD ALIGN="left">orange</TD>
</TR>
<TR>
<TD ALIGN="center"><INPUT TYPE="Checkbox"
NAME="item_c" VALUE="pear $3"></TD>
<TD ALIGN="left">pear</TD>
</TR>
</TABLE>
<HR><BR>
<CENTER>
Press
<INPUT TYPE="Submit" NAME="Cart1_submit" VALUE="Submit">
to submit your order.
</CENTER>
</FORM>
</BODY>
</HTML>
‫السرفلت‬ ‫إلى‬ ً‫نأت‬ ‫اآلن‬Cart‫ال‬ ‫هذا‬ ‫ومهمت‬‫س‬‫هو‬ ‫رفلت‬‫صفحة‬ ‫من‬ ‫القٌم‬ ‫أخذ‬html‫بنٌة‬ ‫الجلسة‬ ً‫ف‬ ‫ووضعها‬
ً‫ٌل‬ ‫كما‬ ‫ستكون‬ ‫الجلسة‬:
itemCountً‫ف‬ ‫األغراض‬ ‫عدد‬‫العربة‬‫نمط‬ ‫من‬ ‫وهو‬Integer
items‫شكل‬ ‫من‬ ‫مصفوفة‬ ‫عن‬ ‫عباة‬ ‫هو‬Vector‫وفٌها‬‫أسماء‬
‫األشٌاء‬‫بشرابها‬ ‫قمت‬ ً‫الت‬
‫هو‬ ‫السرفلت‬ ‫هذا‬ ‫كود‬
import javax.servlet.*;
//Souce code for Cart servlet invoked when the web form cart.Html is submitted
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Cart extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
/* Retreieve the session object or create
a new one. */
HttpSession session = request.getSession(true);
Integer itemCount = (Integer) session.getValue("itemCount");
Vector items = (Vector) session.getValue("items");
/* If no item has been selected so far, set the count to zero and create a vector. */
if (itemCount == null) {
itemCount = new Integer(0);
items = new Vector( );
}
// It is recommended that you obtain the session object prior to writing any output.
PrintWriter out = response.getWriter( );
response.setContentType("text/html");
/* Retrieve form data */
Enumeration keys;
String name, value, prefix;
int count = itemCount.intValue( );
keys = request.getParameterNames();
while (keys.hasMoreElements())
{
name = (String)keys.nextElement();
prefix = name.substring(0,4);
out.println("name=" + name + " prefix=" + prefix);
if (prefix.equals("item"))
{
// add item to list of items
value = request.getParameter(name);
out.println("adding to items:" + value + " count=" + count);
items.add(value);
count++;
}//end if
} //end while
itemCount = new Integer(count);
session.putValue("itemCount", itemCount);
if (items != null)
session.putValue("items", items);
/* Issue a redirect to send the cookies and invoke another servlet to generate a display
of the items in the shopping cart */
response.sendRedirect("http://localhost:8085/sessions/Cart2");
} //end doPost
} //end class
‫السرفلت‬ ‫إذا‬Cart‫السرفلت‬ ‫إلى‬ ‫ٌنقلنا‬ ‫الجلسة‬ ‫إلى‬ ‫المشترٌات‬ ‫أدخال‬ ‫بعد‬Cart2‫بطباعة‬ ‫ٌقوم‬ ‫السرفبت‬ ‫هذا‬
‫المشترٌات‬‫وأسعارها‬‫هو‬ ‫السرفلت‬ ‫هذا‬ ‫كود‬
‫التدريب‬ ‫اجل‬ ‫من‬ ‫وجبات‬
‫بإعادة‬ ‫قم‬‫الجلسات‬ ‫فكرة‬ ‫على‬ ‫تعمل‬ ‫أن‬ ‫على‬ ‫اللعبة‬ ‫برمجة‬
// Servlet to view what is in the shopping cart (as recorded by the use a session object in the Cart servlet
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Cart2 extends HttpServlet
{
/* View items in shopping cart */
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
// Retreieve the session object, if any
HttpSession session = req.getSession(false);
Integer itemCount;
Vector items = null;
if (session == null)
{
//no session object has been created
itemCount = new Integer(0);
}
else
{
itemCount = (Integer) session.getValue("itemCount");
items = (Vector) session.getValue("items");
}
// It is recommended that you obtain the session object
// prior to writing any output.
PrintWriter out = res.getWriter( );
res.setContentType("text/html");
out.println("<html>");
out.println("<head><title>Servlet Response" + "</title></head>");
out.println("<body>");
out.println("<body bgcolor="beige">");
out.println ("Contents of your shopping cart " + " using session object<UL>");
int count = itemCount.intValue( );
/* Retrieve the items from the session object*/
for (int i = 0; i < count; i++)
out.println("<LI>" + items.get(i));
out.println("</UL>");
out.println("<HR>");
out.println("</body></html>");
} // end doGet
} // end Cart2

More Related Content

Viewers also liked

الدرس الخامس عشر
الدرس الخامس عشرالدرس الخامس عشر
الدرس الخامس عشرAnas Aloklah
 
الدرس الثامن
الدرس الثامنالدرس الثامن
الدرس الثامنAnas Aloklah
 
The coming-great-shift-07-02-2012 13-27
The coming-great-shift-07-02-2012 13-27The coming-great-shift-07-02-2012 13-27
The coming-great-shift-07-02-2012 13-27Own
 
Family project
Family projectFamily project
Family projectslideet
 
الدرس الحادي عشر
الدرس الحادي عشرالدرس الحادي عشر
الدرس الحادي عشرAnas Aloklah
 
Linea 600
Linea 600Linea 600
Linea 600facalva
 
Linea 300
Linea 300Linea 300
Linea 300facalva
 
Voltage characteristics an overlooked contributor to power quality assessment
Voltage characteristics an overlooked contributor to power quality assessmentVoltage characteristics an overlooked contributor to power quality assessment
Voltage characteristics an overlooked contributor to power quality assessmentsunny katyara
 
تحلیل احساسات در شبکه های اجتماعی
تحلیل احساسات در شبکه های اجتماعیتحلیل احساسات در شبکه های اجتماعی
تحلیل احساسات در شبکه های اجتماعیHamed Azizi
 
تحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوب
تحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوبتحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوب
تحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوبHamed Azizi
 

Viewers also liked (12)

Unidad 7
Unidad 7Unidad 7
Unidad 7
 
الدرس الخامس عشر
الدرس الخامس عشرالدرس الخامس عشر
الدرس الخامس عشر
 
الدرس الثامن
الدرس الثامنالدرس الثامن
الدرس الثامن
 
IIASC Projects
IIASC Projects IIASC Projects
IIASC Projects
 
The coming-great-shift-07-02-2012 13-27
The coming-great-shift-07-02-2012 13-27The coming-great-shift-07-02-2012 13-27
The coming-great-shift-07-02-2012 13-27
 
Family project
Family projectFamily project
Family project
 
الدرس الحادي عشر
الدرس الحادي عشرالدرس الحادي عشر
الدرس الحادي عشر
 
Linea 600
Linea 600Linea 600
Linea 600
 
Linea 300
Linea 300Linea 300
Linea 300
 
Voltage characteristics an overlooked contributor to power quality assessment
Voltage characteristics an overlooked contributor to power quality assessmentVoltage characteristics an overlooked contributor to power quality assessment
Voltage characteristics an overlooked contributor to power quality assessment
 
تحلیل احساسات در شبکه های اجتماعی
تحلیل احساسات در شبکه های اجتماعیتحلیل احساسات در شبکه های اجتماعی
تحلیل احساسات در شبکه های اجتماعی
 
تحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوب
تحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوبتحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوب
تحلیل احساسات شبکه اجتماعی متن کاوی نظرکاوی حامد عزیزی تهران جنوب
 

Similar to الدرس التاسع

باللغة العربية SASS دورة
  باللغة العربية SASS دورة   باللغة العربية SASS دورة
باللغة العربية SASS دورة anees abu-hmaid
 
الدرس الرابع عشر
الدرس الرابع عشرالدرس الرابع عشر
الدرس الرابع عشرAnas Aloklah
 
access complet.pptx
access complet.pptxaccess complet.pptx
access complet.pptxGmachImen
 
الدرس العاشر
الدرس العاشرالدرس العاشر
الدرس العاشرAnas Aloklah
 
مذكرة في لغة Html 2
مذكرة في لغة Html   2مذكرة في لغة Html   2
مذكرة في لغة Html 2خالد مراد
 
مذكرة في لغة Html 2
مذكرة في لغة Html   2مذكرة في لغة Html   2
مذكرة في لغة Html 2خالد مراد
 
مواضيع متقدمة في JavaScript
مواضيع متقدمة في JavaScriptمواضيع متقدمة في JavaScript
مواضيع متقدمة في JavaScriptMolham Al-Maleh
 

Similar to الدرس التاسع (7)

باللغة العربية SASS دورة
  باللغة العربية SASS دورة   باللغة العربية SASS دورة
باللغة العربية SASS دورة
 
الدرس الرابع عشر
الدرس الرابع عشرالدرس الرابع عشر
الدرس الرابع عشر
 
access complet.pptx
access complet.pptxaccess complet.pptx
access complet.pptx
 
الدرس العاشر
الدرس العاشرالدرس العاشر
الدرس العاشر
 
مذكرة في لغة Html 2
مذكرة في لغة Html   2مذكرة في لغة Html   2
مذكرة في لغة Html 2
 
مذكرة في لغة Html 2
مذكرة في لغة Html   2مذكرة في لغة Html   2
مذكرة في لغة Html 2
 
مواضيع متقدمة في JavaScript
مواضيع متقدمة في JavaScriptمواضيع متقدمة في JavaScript
مواضيع متقدمة في JavaScript
 

More from Anas Aloklah

الدرس الثالث عشر
الدرس الثالث عشرالدرس الثالث عشر
الدرس الثالث عشرAnas Aloklah
 
الدرس السادس عشر
الدرس السادس عشرالدرس السادس عشر
الدرس السادس عشرAnas Aloklah
 
مقدمة قواعد بيانات أوراكل
مقدمة قواعد بيانات أوراكلمقدمة قواعد بيانات أوراكل
مقدمة قواعد بيانات أوراكلAnas Aloklah
 
الدرس الثاني عشر
الدرس الثاني عشرالدرس الثاني عشر
الدرس الثاني عشرAnas Aloklah
 
الدرس السابع
الدرس السابعالدرس السابع
الدرس السابعAnas Aloklah
 
الدرس السادس
الدرس السادسالدرس السادس
الدرس السادسAnas Aloklah
 
الدرس الخامس
الدرس الخامسالدرس الخامس
الدرس الخامسAnas Aloklah
 
الدرس الرابع
الدرس الرابعالدرس الرابع
الدرس الرابعAnas Aloklah
 
الدرس الثالث
الدرس الثالثالدرس الثالث
الدرس الثالثAnas Aloklah
 
الدرس الثاني
الدرس الثانيالدرس الثاني
الدرس الثانيAnas Aloklah
 
Introduction in jsp & servlet
Introduction in jsp & servlet Introduction in jsp & servlet
Introduction in jsp & servlet Anas Aloklah
 

More from Anas Aloklah (11)

الدرس الثالث عشر
الدرس الثالث عشرالدرس الثالث عشر
الدرس الثالث عشر
 
الدرس السادس عشر
الدرس السادس عشرالدرس السادس عشر
الدرس السادس عشر
 
مقدمة قواعد بيانات أوراكل
مقدمة قواعد بيانات أوراكلمقدمة قواعد بيانات أوراكل
مقدمة قواعد بيانات أوراكل
 
الدرس الثاني عشر
الدرس الثاني عشرالدرس الثاني عشر
الدرس الثاني عشر
 
الدرس السابع
الدرس السابعالدرس السابع
الدرس السابع
 
الدرس السادس
الدرس السادسالدرس السادس
الدرس السادس
 
الدرس الخامس
الدرس الخامسالدرس الخامس
الدرس الخامس
 
الدرس الرابع
الدرس الرابعالدرس الرابع
الدرس الرابع
 
الدرس الثالث
الدرس الثالثالدرس الثالث
الدرس الثالث
 
الدرس الثاني
الدرس الثانيالدرس الثاني
الدرس الثاني
 
Introduction in jsp & servlet
Introduction in jsp & servlet Introduction in jsp & servlet
Introduction in jsp & servlet
 

الدرس التاسع

  • 1. ‫الر‬ ‫هللا‬ ‫بسم‬‫ح‬‫الرحيم‬ ‫من‬ ‫الجلسات‬ ‫عن‬ ‫الدرس‬ ‫الٌوم‬(Session) ‫هو‬ ‫الدرس‬ ‫بهذا‬ ‫سنأخذه‬ ‫ما‬: ً‫ه‬ ‫ما‬‫الجلسات‬(Session) ‫استخدام‬ ‫وراء‬ ‫الحاجة‬Session ‫مع‬ ‫التعامل‬ ‫كٌفٌة‬Session ‫الصف‬ ‫طرق‬HttpSession ‫الكوكٌز‬ ‫بٌن‬ ‫الفرق‬(Cookie)‫والجلسات‬(Session) ‫المستعر‬ ‫جلسات‬ ‫بٌن‬ ‫الفرق‬ً‫الكوك‬ ‫أو‬ ‫ض‬(Session Cookie)‫السٌرفر‬ ‫جلسات‬ ‫و‬(Session) ً‫توضٌح‬ ‫مثال‬‫الجلسات‬ ‫عن‬ ‫الجلسات‬ ‫استخدام‬ ‫عن‬ ‫مثال‬(Session)‫التسوق‬ ‫عربة‬ ً‫ف‬ ‫التدرٌب‬ ‫أجل‬ ‫من‬ ‫واجبات‬ ‫الجلسات‬ ‫هي‬ ‫ما‬(Session): ‫الـ‬Session‫ذا‬ ً‫ف‬ ‫به‬ ‫ٌحتفظ‬ ‫هو‬ ‫ولكن‬ ‫وقٌمة‬ ‫اسم‬ ‫ٌحمل‬ ‫فهو‬ ً‫الكوك‬ ‫ٌشبه‬ ‫شًء‬ ‫عن‬ ‫عبارة‬ ً‫ه‬‫السٌرفر‬ ‫كرة‬ ‫الـ‬ ‫وٌربط‬Session‫عبر‬ ‫العمٌل‬ ‫بجهاز‬ID‫الـ‬ ‫وعمر‬Session‫المستعرض‬ ‫فاتح‬ ‫مازلت‬ ‫أنك‬ ‫طالما‬ ‫هو‬ ‫استخدام‬ ‫وراء‬ ‫الحاجة‬Session: ‫لـ‬Session‫استخدمها‬ ‫جاء‬ ‫لكن‬ ‫كثٌر‬ ‫استخدامات‬‫الصعبات‬ ‫بعض‬ ‫ظهور‬ ‫بعد‬‫البٌانات‬ ‫حفظ‬ ً‫ف‬‫داخل‬ ‫تنقلك‬ ‫أثناء‬ ‫فعلى‬ ‫موقع‬‫كان‬ ‫لو‬ ‫المثال‬ ‫سبٌل‬‫قبل‬ ‫بشرابه‬ ‫قمت‬ ‫ما‬ ‫حفظ‬ ‫للسٌرفر‬ ‫ٌمكن‬ ‫فكٌف‬ ‫اإلنترنت‬ ‫على‬ ‫تسوق‬ ‫موقع‬ ‫لدٌنا‬ ‫بروتوكول‬ ‫إمكانٌات‬ ‫إلى‬ ‫نظرنا‬ ‫لو‬ ‫ولكن‬ ‫بسٌط‬ ‫األمر‬ ‫تجد‬ ‫قد‬ ‫المشترٌات‬ ‫الفاتورة‬ ‫ودفع‬ ‫الموقع‬ ‫من‬ ‫خروجك‬ HTTP‫لذا‬ ‫معقد‬ ‫األمر‬ ‫ستجد‬‫أجل‬ ‫من‬ ‫اقتراحات‬ ‫عدة‬ ‫جاءت‬‫المشكلة‬ ‫هذه‬ ‫حل‬:1-ٌ‫الكوك‬ ‫طرٌق‬ ‫عن‬‫ز‬,2-‫عن‬ ‫ط‬‫الرابط‬ ً‫ف‬ ‫القٌم‬ ‫وضع‬ ‫رٌق‬,3-‫الـ‬ ‫تاغ‬ ‫طرٌق‬ ‫عن‬html‫نموذج‬(form)ً‫المخف‬(hidden.)‫ممكن‬ ‫ذكرناه‬ ‫وما‬ ‫الجلسات‬ ‫مبدأ‬ ‫ٌحل‬ ‫أن‬. ‫الكوكيز‬ ‫الـ‬ ‫تخزٌن‬ ‫أجل‬ ‫من‬ ‫الكوكٌز‬ ‫استخدام‬ ‫ٌمكنك‬ID‫الحق‬ ‫اتصال‬ ‫كل‬ ‫مع‬ ً‫اإللكترون‬ ‫التسوق‬ ‫جلسة‬ ً‫ف‬,‫وٌمكنك‬ ‫الـ‬ ‫عن‬ ‫البحث‬ID‫وتستخدم‬ ‫الحالٌة‬ ‫للجلسة‬‫الـ‬ID‫المعلوما‬ ‫استخراج‬ ‫أجل‬ ‫من‬‫جهاز‬ ‫على‬ ‫البحث‬ ‫جدول‬ ‫من‬ ‫ت‬ ‫الخادم‬.‫جدولٌن‬ ‫الحقٌقة‬ ً‫ف‬ ‫فهناك‬:‫الـ‬ ‫معرفات‬ ‫ٌحمل‬ ‫جدول‬ ‫األول‬ID‫المستخدمٌن‬ ‫جدول‬ ‫مع‬ ‫المرتبط‬,‫وجدول‬ ‫بالمستخدمٌن‬ ‫الخاصة‬ ‫البٌانات‬ ‫تخزٌن‬ ‫أجل‬ ‫من‬ ‫المخصص‬ ‫المستخدمٌن‬. ‫السر‬ ‫باستخدام‬ ‫ما‬ ‫طلب‬ ‫أخذ‬ ‫أردنا‬ ‫لو‬ ‫المثال‬ ‫سبٌل‬ ‫على‬‫فلت‬: String sessionID = makeUniqueString(); HashMap sessionInfo = new HashMap(); HashMap globalTable = findTableStoringSessions(); globalTable.put(sessionID, sessionInfo); Cookie sessionCookie = new Cookie("JSESSIONID", sessionID); sessionCookie.setPath("/"); response.addCookie(sessionCookie); ‫التجزبة‬ ‫جدول‬ ‫باستخدام‬ ‫المخدم‬ ‫بطلب‬ ‫بعد‬ ‫فٌما‬ ‫تقوم‬ ‫أنت‬(hash table)globalTable‫ٌجدول‬ ‫لربطه‬‫التجزبة‬ (hash table)sessionInfo‫الـ‬ ‫بواسطة‬ID‫تصل‬ ‫وهكذا‬ ‫العمٌل‬ ‫إلى‬ ‫بإرساله‬ ‫قمت‬ ‫الذي‬ ً‫الكوك‬ ‫خالل‬ ‫من‬ ‫المح‬ ‫بالعمٌل‬ ‫الخاصة‬ ‫للبٌانات‬‫دد‬. ‫الكوكٌز‬ ‫استخدام‬‫الطرٌقة‬ ‫هذه‬ ً‫ف‬‫الحل‬ ‫هو‬‫و‬ ‫الممتاز‬‫النهج‬ ‫هو‬‫استخداما‬ ‫األكثر‬‫مع‬ ‫للتعامل‬‫الجلسات‬(Session). ,‫ذلك‬ ‫ومع‬‫الجمٌل‬ ‫فمن‬‫أن‬‫تطبٌق‬ ‫لها‬ ‫ٌكون‬‫سٌرفلٌت‬‫أجل‬ ‫من‬ ً‫عال‬ ‫مستوى‬ ‫على‬‫أن‬‫كل‬ ‫ٌعالج‬‫هذا‬‫المهام‬ ‫إلى‬ ‫باإلضافة‬‫التالٌة‬ ‫المهام‬‫الشكل‬ ‫بهذا‬ ‫تطبٌقها‬ ‫الصغب‬:
  • 2. ‫ا‬‫الـ‬ ‫قٌمة‬ ‫حمل‬ ‫الذي‬ ً‫الكوك‬ ‫ستخراج‬ID‫العمٌل‬ ‫جهاز‬ ‫على‬ ‫الموجودة‬ ‫الكوكٌز‬ ‫جمٌع‬ ‫ضمن‬ ‫من‬ ‫انتهت‬ ً‫الت‬ ‫الجلسات‬ ‫تحدٌد‬ ‫التجزبة‬ ‫جدول‬ ‫ربط‬(hash table)‫الطلبات‬ ‫كل‬ ‫مع‬ ‫تولد‬ID‫فرٌد‬‫معه‬ ‫الجلسة‬ ‫فتح‬ ‫أجل‬ ‫من‬ ‫للعمٌل‬ ‫إعطابه‬ ‫أجل‬ ‫من‬ ‫مالحظة‬:‫التجزبة‬ ‫جدول‬ ‫هو‬ ‫ما‬(hash table) ‫جدول‬‫التجز‬‫أو‬ ‫بة‬ً‫ف‬ ‫أما‬ ‫الخانة‬ ‫رقم‬ ‫هو‬ ‫العنصر‬ ‫دلٌل‬ ‫المصفوفة‬ ‫ولكن‬ ‫بالمصفوفة‬ ‫أشبه‬ ‫هو‬ ‫التقطٌع‬ ‫جدول‬ ‫فرٌد‬ ‫أسم‬ ‫له‬ ‫ٌكون‬ ‫دلٌل‬ ‫فكل‬ ‫محرفٌة‬ ‫سلسلة‬ ‫ٌكون‬ ‫هو‬ ‫مفتاح‬ ‫عن‬ ‫عبارة‬ ‫وهو‬ ‫عنصر‬ ‫كل‬ ‫دلٌل‬ ‫فأن‬ ‫التقطٌع‬ ‫الجدول‬ ‫وسوف‬ ‫األخرى‬ ‫الخانة‬ ‫عن‬‫أعرض‬‫بٌنهما‬ ‫االختالف‬ ‫لتوضٌح‬ ‫مثال‬. ‫عادٌة‬ ‫مصفوفة‬ 0 1 2 3 4 ‫التقطٌع‬ ‫جدول‬ Anas key anything anyKey 12ab ‫الخانة‬ ‫مفتاح‬ ‫ٌسمى‬ ‫االسم‬ ‫هذا‬ ‫رقمها‬ ‫ولٌس‬ ‫الخانة‬ ‫اسم‬ ‫عبر‬ ‫خانة‬ ‫أي‬ ‫إلى‬ ‫الوصول‬ ‫تستطٌع‬ ‫التقطٌع‬ ‫جدول‬ ‫إذا‬ ‫الرابط‬ ‫صياغة‬ ‫إعادة‬(URL) ‫ف‬ ‫المعلومات‬ ‫بعض‬ ‫إلحاق‬ ‫تستطٌع‬ ‫الطرٌقة‬ ‫بهذه‬‫العنوان‬ ‫نهاٌة‬ ً(URL)‫المعلومات‬ ‫بعض‬ ‫وضع‬ ‫وتستطٌع‬ ‫المعرف‬ ‫مع‬ ‫الخادم‬ ‫وربط‬ ‫بالجلسة‬ ‫الخاصة‬(ID)‫الشكل‬ ‫مع‬ ‫المثال‬ ‫سبٌل‬ ‫فعلى‬ ‫بالمستخدم‬ ‫الخاص‬ http://host/path/file.html;jsessionid=a1234‫بالرا‬ ‫مرفق‬ ‫الجلسة‬ ‫معرف‬‫وهو‬ ‫بط‬jsessionid=a1234,‫القيمة‬ ‫أن‬ a1234‫بالمستخدمٌن‬ ‫المرتبط‬ ‫البٌانات‬ ‫جدول‬ ‫أجل‬ ‫من‬ ‫فرٌد‬ ‫معرف‬.‫هذا‬‫األسلوب‬‫دور‬ ‫للعب‬ ‫ما‬ ً‫ا‬‫نوع‬ ‫جٌد‬ ‫الجلسة‬,‫ٌدعم‬ ‫ال‬ ‫المتصفح‬ ‫كان‬ ‫إذا‬ ‫مٌزة‬ ‫ولدٌه‬‫المستخدم‬ ‫كان‬ ‫إذا‬ ‫أو‬ ‫الكوكٌز‬‫قام‬‫جهازه‬ ‫على‬ ‫الكوكٌز‬ ‫بتعطٌل‬. ‫األسلوب‬ ‫هذا‬ ‫المقابل‬ ً‫ف‬ ‫ولكن‬‫ل‬‫بها‬ ‫القٌام‬ ‫صعب‬ ‫المعالجة‬ ‫عملٌة‬ ‫أن‬ ‫أي‬ ‫الكوكٌز‬ ً‫ف‬ ‫كان‬ ‫كما‬ ‫عٌب‬ ‫دٌه‬. ‫كل‬ ‫مع‬ ‫جدا‬ ‫حذر‬ ‫تكون‬ ‫أن‬ ‫ٌجب‬ ‫أنك‬ ‫إلى‬ ‫ذكرنها‬ ً‫الت‬ ‫األمور‬ ‫معالجة‬ ً‫ف‬ ‫المستوى‬ ً‫عال‬ ‫تطبٌق‬ ‫وجود‬ ‫مع‬ ‫حتى‬ ‫بك‬ ‫الخاص‬ ‫الموقع‬ ‫إلى‬ ‫ٌشر‬ ‫رابط‬‫المستخدم‬ ‫إلى‬ ‫ترسله‬ ‫سوف‬ ‫الذي‬. ‫المخفية‬ ‫النماذج‬ ‫حقول‬ ‫حقول‬ ‫نستخدم‬ ‫سوف‬ ‫هنا‬ً‫ف‬ ‫المخفٌة‬ ‫النماذج‬HTMLً‫ٌل‬ ‫كما‬ ‫ٌكون‬ ‫وذلك‬ ‫بالجلسة‬ ‫تتعلق‬ ً‫الت‬ ‫قٌم‬ ‫لوضع‬: <INPUT TYPE="HIDDEN" NAME="session" VALUE="a1234"> ‫كبٌرا‬ ‫مساوئ‬ ‫األسلوب‬ ‫لهذا‬ ‫ولكن‬ ‫بالجلسة‬ ‫تتعلق‬ ً‫الت‬ ‫القٌم‬ ‫وضع‬ ً‫ف‬ ‫المخفٌة‬ ‫الحقول‬ ‫نستخدم‬ ‫فأننا‬ ‫نكرنا‬ ‫كمت‬ ‫من‬ ‫حٌوي‬ ‫بشكل‬ ‫الصفحة‬ ‫أنشاء‬ ‫علٌك‬ ً‫ه‬‫نم‬ ‫كل‬ ‫أجل‬ً‫مخف‬ ‫وذج‬ً‫تشعب‬ ‫رابط‬ ‫على‬ ‫بالضغط‬ ‫قمت‬ ‫إذا‬ ‫و‬ (<A HREF...>..</a>)‫الق‬ ‫فإن‬‫تضٌع‬ ‫وسوف‬ ‫تخزن‬ ‫لن‬ ‫النماذج‬ ً‫ف‬ ‫ٌم‬.‫د‬ ‫األسلوب‬ ‫لهذا‬ ً‫ف‬ ‫نرى‬ ‫ال‬ ‫لذالك‬‫ا‬‫عم‬ ‫الجلسات‬ ‫أجل‬ ‫من‬ ‫قوي‬(session tracking.) ‫السرفلت‬ ‫في‬ ‫الجلسات‬ ‫توف‬ ‫السرفلت‬‫الجلسات‬ ‫أجل‬ ‫من‬ ‫مستحق‬ ‫حل‬ ‫لك‬ ‫ر‬(session-tracking)‫هو‬:‫التطبٌق‬HttpSession. ‫من‬ ‫أعلى‬ ‫المستوى‬ ‫عالٌة‬ ‫واجها‬ ‫بناء‬ ‫تم‬ ‫التطبٌق‬ ‫هذا‬ ً‫ف‬‫الرابط‬ ‫صٌغة‬ ‫إعادة‬ ‫و‬ ‫الكوكٌز‬ ‫فكرة‬(URL.)‫كل‬ ً‫ا‬ٌ‫وحال‬ ‫الجلسات‬ ‫طلب‬ ‫تدعم‬ ‫المخدمات‬. ‫مع‬ ‫التعامل‬ ‫كيفية‬Session: ‫مو‬ ‫اآلن‬ ً‫أعط‬ ‫وسوف‬ ‫أساسٌة‬ ‫خطوات‬ ‫أربع‬ ‫وٌشمل‬ ‫وصرٌح‬ ‫وضح‬ ‫السرفلت‬ ً‫ف‬ ‫الجلسات‬ ‫استخدام‬‫عنها‬ ‫جز‬ ‫بالتفصٌل‬ ‫واحد‬ ‫كل‬ ‫أشرح‬ ‫سوف‬ ‫وبعدها‬: 1-‫استدعاء‬ ‫أجل‬ ‫من‬‫غرض‬‫الـ‬Sessionً‫التال‬ ‫بطرٌقة‬ ‫ٌتم‬: HttpSession session = request.getSession(); 2-‫من‬ ‫قٌم‬ ‫استدعاء‬ ‫أجل‬ ‫من‬Session: SomeClass value = (SomeClass) session.getAttribute("someIdentifier"); ‫الطرٌقة‬ ‫تعٌد‬getAttribute‫نمط‬ ‫من‬ ‫قٌمة‬Object‫ترٌده‬ ‫أنت‬ ‫الذي‬ ‫النمط‬ ‫إلى‬ ‫قصرها‬ ‫وٌتم‬ 3-‫الـ‬ ً‫ف‬ ‫قٌمة‬ ‫وضع‬ ‫أجل‬ ‫من‬Session: value = new SomeClass(...); session.setAttribute("someIdentifier", value); ‫الـ‬ ً‫ف‬ ‫توضع‬ ً‫الت‬ ‫القٌمة‬ ً‫ا‬‫أٌض‬Session‫بسٌط‬ ‫نمط‬ ‫ولٌس‬ ‫غرض‬ ُ‫ا‬‫أٌض‬
  • 3. 4-‫من‬ ‫قٌم‬ ‫إزالة‬ ‫أجل‬ ‫من‬‫الـ‬Session: ‫من‬ ‫قٌم‬ ‫إزالة‬ ‫أجل‬ ‫من‬ ‫طرق‬ ‫ثالث‬ ‫هناك‬‫الـ‬Session ‫الغرض‬ ‫فأن‬ ‫ذكرنا‬ ‫كما‬session‫الصف‬ ‫من‬HttpSession‫تقطٌع‬ ‫جدول‬ ‫هو‬(hash table.) ‫بالتفصٌل‬ ‫واحدة‬ ‫كل‬ ‫إلى‬ ً‫تأت‬ ‫اآلن‬. ‫استدعاء‬‫غرض‬‫الـ‬Session ‫الكابن‬Session‫النمط‬ ‫من‬ ‫هو‬HttpSession,‫ج‬ ‫عن‬ ‫عبارة‬ ‫هو‬ ‫األساس‬ ً‫ف‬ ‫لكنه‬‫تقطٌع‬ ‫دول‬(hash table) ‫عنه‬ ‫سابقة‬ ‫مالحظة‬ ً‫ف‬ ‫ذكرنها‬ ‫ولقد‬.‫من‬ ‫كابن‬ ‫على‬ ‫الحصول‬ ‫أجل‬ ‫من‬HttpSession‫باستدعاء‬ ‫ٌتم‬ ‫فذالك‬ ‫الطرٌقة‬getSession‫من‬HttpServletRequestً‫ٌل‬ ‫كما‬ ‫ٌتم‬ ‫ولذك‬: HttpSession session = request.getSession(); ‫الـ‬ ‫استخراج‬ ً‫ف‬ ‫ٌحصل‬ ‫ما‬ ‫الحقٌقة‬ ً‫ف‬ID‫الخا‬ً‫ف‬ ‫مرفقة‬ ‫معلومات‬ ‫أو‬ ً‫كوك‬ ‫طرٌق‬ ‫عن‬ ‫أما‬ ‫ٌتم‬ ‫بالمستخدم‬ ‫ص‬ ‫العنوان‬(URL),‫الـ‬ ‫ٌستخدم‬ ‫ثم‬ID‫الصف‬ ً‫ف‬ ‫األغراض‬ ‫جدول‬ ً‫ف‬ ‫كمفتاح‬HttpSession‫إنشاءه‬ ‫تم‬ ‫الذي‬ ً‫ا‬‫مسبق‬,‫للم‬ ‫بالنسبة‬ ‫شفاف‬ ‫بشكل‬ ‫ٌجري‬ ‫هذا‬ ‫كل‬ ‫ولكن‬‫برمج‬:‫لطرٌقة‬ ‫استدعابك‬ ‫بمجرد‬ ‫فأنت‬getSession‫لم‬ ‫إذا‬ ‫ال‬ ‫على‬ ‫العثور‬ ‫ٌتم‬‫ـ‬ID‫العنوان‬ ‫مع‬ ‫مرفق‬ ‫وال‬ ً‫الكوك‬ ‫ملف‬ ً‫ف‬ ‫بالجلسة‬ ‫الخاص‬(URL)‫جلسة‬ ‫ٌخلق‬ ‫النظام‬ ‫فأن‬ ‫فارغة‬ ‫جدٌدة‬,‫العمٌل‬ ‫جهاز‬ ً‫ف‬ ً‫الكوك‬ ‫استخدام‬ ‫ٌتم‬ ‫كان‬ ‫وإذا‬(ً‫أفتراض‬ ‫الوضع‬ ‫هذا‬)‫بإنشاء‬ ‫ٌقوم‬ ‫النظام‬ ‫فأن‬ ‫اسمه‬ ً‫كوك‬JSESSIONIDً‫ه‬ ‫وقٌمته‬ID‫بالجلسة‬ ‫خاصة‬ ‫فرٌدة‬ ‫قٌمة‬ ً‫وه‬.‫ب‬ ‫نجد‬ ‫سبق‬ ‫مما‬ ‫إذا‬‫ممكن‬ ‫أن‬ ‫بالطرٌقة‬ ‫الجلسة‬ ‫االستدعاء‬ ‫عملٌة‬ ‫تتاثر‬ ‫أن‬ ‫الممكن‬request.getSession()‫عملٌة‬ ‫فأن‬ ‫هذا‬ ‫على‬ ‫وبناء‬ ‫الـ‬ ً‫ف‬ ‫قٌم‬ ‫أي‬ ‫وضع‬ ‫ٌمكن‬ ‫عندما‬ ‫تحصل‬ ‫االستدعاء‬HTTP response headers‫أر‬ ‫قبل‬ ‫وذلك‬‫محتوى‬ ‫أي‬ ‫سال‬ ‫للعمٌل‬ ‫للوثٌقة‬. ‫الن‬ ‫بغض‬ ‫الجلسة‬ ً‫ف‬ ‫بٌانات‬ ‫تضع‬ ‫أن‬ ‫ترٌد‬ ‫كنت‬ ‫إذا‬ ‫اآلن‬‫ال‬ ‫أما‬ ‫السابق‬ ً‫ف‬ ‫بٌانات‬ ‫تحتوي‬ ‫الجلسة‬ ‫كان‬ ‫إذا‬ ‫ظر‬ ً‫األت‬ ‫بالشكل‬ ‫استدعاء‬ ‫فعلٌك‬ ‫بٌانات‬ ‫أي‬ ‫على‬ ‫تحوي‬:request.getSession(true)‫نفس‬ ‫تكافا‬ ً‫وه‬ ‫االستدعاء‬request.getSession()‫أنها‬ ‫على‬ ‫القٌم‬ ‫ٌأخذ‬ ً‫ا‬ٌ‫إفتراض‬ ‫إذا‬true‫ألنه‬ ‫مناسب‬ ‫االستدعاء‬ ‫هذا‬ ‫لم‬ ‫إذا‬ ‫جدٌدة‬ ‫جلسة‬ ‫ٌنشا‬ ‫سوف‬‫بالفعل‬ ‫موجودة‬ ‫جلسة‬ ‫هناك‬ ‫ٌكون‬.‫الجلسة‬ ‫محتوى‬ ‫طباعة‬ ‫فقط‬ ‫ترٌد‬ ‫كنت‬ ‫حال‬ ً‫ف‬ ً‫التال‬ ‫باستدعاء‬ ‫تقوم‬ ‫فهنا‬request.getSession(false)ً‫ف‬ ‫جدٌدة‬ ‫جلسة‬ ‫إنشاء‬ ‫إلى‬ ‫بحاجة‬ ‫لست‬ ‫أنت‬ ‫هنا‬ ‫القٌم‬ ‫بوضع‬ ‫قمت‬ ‫أنت‬ ‫إذا‬ ‫قٌم‬ ‫هناك‬ ‫تكن‬ ‫لم‬ ‫حال‬true‫تقوم‬ ‫فأنت‬ ‫االستدعاء‬ ً‫ف‬‫ل‬ ‫عملٌات‬ ً‫ف‬ ‫االسراف‬ ً‫ف‬‫ٌس‬ ‫تسوق‬ ‫لعربة‬ ‫المشترٌات‬ ‫قابمة‬ ‫عرض‬ ً‫ف‬ ‫المثال‬ ‫سبٌل‬ ‫على‬ ‫ٌفٌدنا‬ ‫االستدعاء‬ ً‫ف‬ ‫االسلوب‬ ‫هذا‬ ً‫داع‬ ‫أي‬ ‫لدٌها‬ ‫ذالك‬ ‫على‬ ‫بسٌط‬ ‫مثال‬ ‫نعرض‬ ‫واآلن‬ ‫إلكترونٌة‬: HttpSession session = request.getSession(false); if (session == null) { // ‫بطباعة‬ ‫قم‬‫رسالة‬‫ال‬ ‫عربة‬ ً‫ف‬ ‫شًء‬ ‫ٌوجد‬ ‫ال‬ ‫أنه‬‫تسوق‬ } else { //‫المشترٌات‬ ‫قابمة‬ ‫بطباعة‬ ‫قم‬ } ‫مالحظة‬:‫استدعاء‬ ‫علٌك‬request.getSession‫قبل‬‫إرسال‬‫للعمٌل‬ ‫للوثٌقة‬ ‫محتوى‬ ‫أي‬ ‫من‬ ‫قيم‬ ‫استدعاء‬Session ‫لصف‬ ‫التابعة‬ ‫األغراض‬ ‫أن‬HttpSession‫أنما‬ ‫الشبكة‬ ‫عبر‬ ‫وتعود‬ ‫تذهب‬ ‫ال‬ ‫فٌه‬ ‫السٌرفر‬ ‫على‬ ‫تعم‬ ‫تكون‬ ‫بشكل‬ ‫مرتبطة‬ ‫الحقٌقة‬ ً‫ف‬ ً‫ه‬ً‫ف‬ ‫مرفقة‬ ‫معلومات‬ ‫أو‬ ً‫الكوك‬ ‫طرٌق‬ ‫عن‬ ‫العمالء‬ ‫مع‬ ً‫ا‬ٌ‫تلقاب‬ ‫العنوان‬(URL)‫تقطٌع‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ً‫ه‬ ‫الجلسة‬ ‫بنٌة‬ ‫وأن‬ ‫أسلفنا‬ ‫وكما‬(hash table).‫أجل‬ ‫ومن‬ ‫الطرٌقة‬ ‫بواسطة‬ ‫الجلسة‬ ً‫ف‬ ‫سابقا‬ ‫موجودة‬ ‫قٌمة‬ ‫على‬ ‫الحصول‬session.getAttribute("key")‫وتعٌد‬ ‫نمط‬ ‫من‬ ‫قٌمة‬ ‫الطرٌقة‬ ‫هذا‬ ‫لنا‬Object,‫قصر‬ ‫علٌك‬ ‫لذالك‬‫علٌه‬ ‫كان‬ ‫الذي‬ ‫النمط‬ ‫إلى‬ ‫النمط‬.‫وٌعٌد‬null ‫عن‬ ‫تبحث‬ ‫الذي‬ ‫للمفتاح‬ ‫قٌمة‬ ‫ٌوجد‬ ‫ال‬ ‫أو‬ ‫الجلسة‬ ً‫ف‬ ‫موجود‬ ‫عنه‬ ‫تبحث‬ ‫الذي‬ ‫المفتاح‬ ‫ٌكن‬ ‫لم‬ ‫حال‬ ً‫ف‬ ‫قٌمته‬,‫بها‬ ‫المرجعة‬ ‫القٌم‬ ‫كان‬ ‫إذا‬ ‫فٌما‬ ‫التحقق‬ ‫علٌك‬ ‫لذالك‬null‫ال‬ ‫أو‬.‫المثال‬ ‫سبٌل‬ ‫وفعال‬: HttpSession session = request.getSession(); SomeClass value = (SomeClass) session.getAttribute("someIdentifier"); if (value == null) { // No such object already in session value = new SomeClass(...); session.setAttribute("someIdentifier", value); } doSomethingWith(value); ً‫الت‬ ‫المفاتٌح‬ ‫كل‬ ‫على‬ ‫الحصول‬ ‫أردت‬ ‫حال‬ ً‫ف‬ ‫ولكن‬ ‫عنها‬ ‫البحث‬ ‫ترٌد‬ ً‫الت‬ ‫القٌم‬ ‫تعرف‬ ‫أنت‬ ‫الحاالت‬ ‫معظم‬ ً‫ف‬ ‫باستدعاء‬ ‫فقم‬ ‫الجلسة‬ ً‫ف‬getAttributeNames‫نمط‬ ‫من‬ ‫غرض‬ ‫لنا‬ ‫تعٌد‬ ً‫والت‬Enumeration.
  • 4. ‫الـ‬ ‫في‬ ‫قيمة‬ ‫وضع‬Session ‫فعلٌك‬ ‫قٌم‬ ‫على‬ ‫الحصول‬ ‫أجل‬ ‫فمن‬ ‫السابق‬ ً‫ف‬ ‫تحدثنا‬ ‫كما‬‫الطرٌقة‬ ‫استخدام‬ getAttribute ‫وضع‬ ‫أجل‬ ‫ومن‬ ‫الطرٌقة‬ ‫استخدم‬ ‫الجلسة‬ ً‫ف‬ ‫قٌمة‬setAttribute ‫للجلسة‬ ‫قيمة‬ ‫اضافة‬ ‫عن‬ ‫مثال‬ ‫أعرض‬ ‫سوف‬ HttpSession session = request.getSession(); SomeClass value = (SomeClass) session.getAttribute("someIdentifier"); if (value == null) { // No such object already in session value = new SomeClass(...); session.setAttribute("someIdentifier", value); } doSomethingWith(value); ‫بسٌطة‬ ‫قٌمة‬ ‫ولٌست‬ ‫غرض‬ ً‫ه‬ ‫القٌم‬ ‫تكون‬ ‫أن‬ ‫وٌجب‬ ‫قيم‬ ‫إزالة‬‫الـ‬Session ‫الجلسة‬ ‫من‬ ‫قٌم‬ ‫إزالة‬ ‫أجل‬ ‫من‬ ‫طرق‬ ‫ثالث‬ ‫هناك‬ ‫ذكرنا‬ ‫كما‬ 1-‫إل‬‫بننااه‬ ‫قمت‬ ‫الذ‬ ‫السرفلت‬ ‫في‬ ‫فقط‬ ‫قيمة‬ ‫زالة‬‫باستدعاء‬ ‫فعلٌك‬removeAttribute("key") ‫الجلسة‬ ً‫ف‬ ‫قٌمته‬ ‫مع‬ ‫المفتاح‬ ‫بإزالة‬ ‫تقوم‬ ‫هنا‬.ً‫ال‬‫واستعما‬ ً‫ا‬‫شٌوع‬ ‫األكثر‬ ‫األسلوب‬ ‫وهذا‬. 2-‫الجلسة‬ ‫قيم‬ ‫كل‬ ‫إلزالة‬(‫الوي‬ ‫تطبيق‬ ‫ضمن‬‫ب‬‫الحالي‬)‫الطرٌقة‬ ‫باستدعاء‬ ‫قم‬invalidate‫لمسح‬ ‫بأكمل‬ ‫الجلسة‬‫فقط‬ ‫لٌس‬ ‫الجلسة‬ ‫البٌانات‬ ‫جمٌع‬ ‫مسح‬ ‫على‬ ‫ٌقوم‬ ‫سوف‬ ‫ألجراء‬ ‫هذا‬ ‫أن‬ ‫تعرف‬ ‫أن‬ ‫علٌك‬ ‫ها‬ ‫صفحة‬ ‫أو‬ ‫السرفلت‬ ‫على‬jsp‫والصفحات‬ ‫السرفلتات‬ ‫كل‬ ً‫ف‬ ‫الجلسة‬ ‫بٌانات‬ ‫جمٌع‬ ‫مسج‬ ‫على‬ ‫سٌقوم‬ ‫أنما‬ jsp‫التطبٌق‬ ‫هذا‬ ‫ضمن‬. ‫ب‬ ‫الخاصة‬ ‫البيانات‬ ‫جميع‬ ‫ومسح‬ ‫للمستخدم‬ ‫خروج‬ ‫تسجيل‬‫باستدعاء‬ ‫قم‬ ‫هذا‬ ‫أجل‬ ‫من‬‫الطرٌقة‬logout‫وهذه‬ ‫تدعم‬ ً‫الت‬ ‫السرفرات‬ ‫من‬ ‫مدعومة‬ ‫الطرٌقة‬‫إصدار‬2.4‫و‬ ‫للسرفلت‬2.2‫الـ‬ ‫لصفحات‬jsp‫تأثر‬ ‫ال‬ ‫الطرٌقة‬ ‫هذه‬ ‫األخرى‬ ‫السرفلتات‬ ‫على‬. ‫طرق‬‫الصف‬HttpSession: ‫أعرض‬ ‫سوف‬ ‫اآلن‬‫ملخص‬‫ل‬‫الطرقة‬ ‫كل‬‫الموجودة‬‫الصف‬ ً‫ف‬HttpSession public Object getAttribute(String name) ‫الجلسة‬ ً‫ف‬ ً‫ا‬‫مسبق‬ ‫مخزنة‬ ‫قٌمة‬ ‫لك‬ ‫تخرج‬ ‫الطرٌقة‬ ‫هذه‬‫شكل‬ ‫على‬Object‫لك‬ ‫وتعٌد‬null‫وجود‬ ‫عدم‬ ‫حال‬ ً‫ف‬ ‫عنه‬ ‫تبحث‬ ‫الذي‬ ‫المفتاح‬ ‫باالسم‬ ‫القٌمة‬‫سبق‬ ‫فٌما‬ ‫عنها‬ ‫تكلمنا‬ ‫ولقد‬. public Enumeration getAttributeNames() ‫و‬ ‫الجلسة‬ ً‫ف‬ ‫المفاتٌح‬ ‫جمٌع‬ ‫أسماء‬ ‫على‬ ‫تحصل‬ ‫الطرٌقة‬ ‫بهذه‬‫شكل‬ ‫على‬ ‫لك‬ ‫ٌعٌدها‬Enumeration. public void setAttribute(String name, Object value) ‫سبق‬ ‫ما‬ ً‫ف‬ ‫عنها‬ ‫تكلمنا‬ ‫وقد‬ ‫الجلسة‬ ً‫ف‬ ‫قٌمة‬ ‫وضع‬ ‫أجل‬ ‫من‬ ‫الطرٌقة‬ ‫هذه‬ public void removeAttribute(String name) ‫عنها‬ ‫تكلمنا‬ ‫وقد‬ ‫الجلسة‬ ‫من‬ ‫مفتاحها‬ ‫مع‬ ‫قٌمة‬ ‫إزالة‬ ‫أجل‬ ‫من‬ ‫الطرٌقة‬ ‫هذا‬. public void invalidate() ‫سبق‬ ‫فٌما‬ ‫عنه‬ ‫تكلمنا‬ ‫وقد‬ ‫التطبٌق‬ ‫كل‬ ً‫ف‬ ‫الجلسة‬ ‫قٌم‬ ‫جمٌع‬ ‫مسح‬ ‫على‬ ‫تقوم‬ ‫الطرٌقة‬ ‫هذه‬. public void logout() ‫بالمستخدم‬ ‫الخاصة‬ ‫الجلسة‬ ً‫ف‬ ‫البٌانات‬ ‫جمٌع‬ ‫بمسح‬ ‫وتقوم‬ ‫للمستخدم‬ ‫خروج‬ ‫تسجٌل‬ ‫بعملٌة‬ ‫تقوم‬ ‫الطرٌقة‬ ‫هذه‬. public String getId() ٌ‫الطر‬ ‫هذه‬‫الـ‬ ‫لنا‬ ‫ٌعٌد‬ ‫قة‬ID‫جلسة‬ ‫كل‬ ‫أجل‬ ‫من‬ ‫ٌولد‬ ‫الذي‬.
  • 5. public boolean isNew() ‫تعٌد‬ ‫الطرٌقة‬ ‫هذا‬true‫لم‬ ‫المستعرض‬ ‫إذا‬‫الجلسة‬ ‫ٌرى‬,‫الجلسة‬ ‫أنشاء‬ ‫تم‬ ‫ٌكون‬ ‫ما‬ ً‫ة‬‫عاد‬ ‫ألنه‬‫للتو‬‫بدل‬ ‫وذالك‬ ‫العمٌل‬ ‫من‬ ‫وارد‬ ‫الطلب‬ ‫بواسطة‬ ‫العمٌل‬ ‫إلى‬ ‫الرجوع‬.‫لنا‬ ‫وتعٌد‬false‫الجلسة‬ ‫كانت‬ ‫إذا‬‫موجود‬ً‫ا‬‫مسبق‬ ‫ة‬. ‫السرفلت‬ ‫بزٌارة‬ ‫مستخدمٌن‬ ‫قام‬ ‫إذا‬ ‫معرفة‬ ً‫ف‬ ‫الطرٌقة‬ ‫هذه‬ ‫تفٌدنا‬‫صفحة‬ ‫أو‬jsp‫على‬ ‫ومثال‬ ‫سابقة‬ ‫فترى‬ ً‫ف‬ ‫ذالك‬‫ذالك‬ ‫عن‬ ‫ٌعبر‬ ‫الذي‬ ‫الكود‬: HttpSession session = request.getSession(); if (session.isNew()) { // ‫أفعل‬‫أي‬‫زٌارة‬ ‫أول‬ ‫اجل‬ ‫من‬ ‫شًء‬ } else { // ‫شًء‬ ‫أي‬ ‫أفعل‬‫الزابر‬ ‫عودة‬ ‫أجل‬ ‫من‬ } public long getCreationTime() ‫هذا‬‫ثانٌة‬ ً‫بالملل‬ ‫الوقت‬ ‫تعٌد‬ ‫الطرٌقة‬‫منذ‬‫اللٌل‬ ‫منتصف‬,1ً‫الثان‬ ‫كانون‬1792(‫غرٌنتش‬ ‫بتوقٌت‬)‫إلى‬‫الوقت‬ ‫الجلس‬ ‫أنشاء‬ ‫فٌه‬ ‫تم‬ ‫الذي‬‫ة‬.‫قٌمة‬ ‫على‬ ‫للحصول‬‫مفٌدة‬‫للطباعة‬‫قم‬‫ب‬‫القٌمة‬ ‫تمرٌر‬‫الصف‬ ً‫بان‬ ‫إلى‬Date‫أو‬ ‫الطرٌق‬‫ة‬setTimeInMillis‫من‬‫الصف‬GregorianCalendar. public long getLastAccessedTime() ‫اللٌل‬ ‫منتصف‬ ‫منذ‬ ‫ثانٌة‬ ً‫بالمٌل‬ ‫الوقت‬ ‫لنا‬ ‫تعٌد‬ ‫الطرٌقة‬ ‫هذا‬1ً‫الثان‬ ‫كانون‬1792(‫غرٌنتش‬ ‫بتوقٌت‬)‫الوقت‬ ‫إلى‬ ‫الجلسة‬ ً‫ف‬ ‫للعمٌل‬ ‫مشاركة‬ ‫أخر‬. public int getMaxInactiveInterval() public void setMaxInactiveInterval(int seconds) ‫سواء‬ ‫الطرٌقتان‬ ‫هتان‬set‫أو‬get‫أجل‬ ‫من‬‫بالثانٌة‬ ‫الوقت‬ ‫طول‬ ‫والجلسات‬ ‫الكوكيز‬ ‫بين‬ ‫الفرق‬ ‫حيث‬ ‫من‬ ‫الفرق‬‫جلسات‬‫الكوكيز‬ ‫ماهيت‬‫تقطٌع‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ‫هو‬(hash table)‫صغٌر‬ ‫ملف‬ ‫عن‬ ‫عبارة‬ ‫هو‬ ‫الوجود‬ ‫مكان‬‫السٌرفر‬ ‫ذاكرة‬ ً‫ف‬‫جهاز‬ ‫على‬‫المستعرض‬ ‫ذاكرة‬ ً‫ف‬ ‫أو‬ ‫العمٌل‬ ‫الزمنية‬ ‫المدة‬‫المستعرض‬ ‫تغلق‬ ‫لم‬ ‫أنك‬ ‫طالما‬‫كالجلسة‬ ‫ٌعمل‬ ‫أو‬ ‫محدد‬ ‫فترة‬ ‫ضمن‬ ‫ٌعمل‬ ‫ربط‬ ‫طريقة‬ ‫بالمستخدم‬ ‫بالعنوان‬ ‫مرفقة‬ ‫معلومات‬ ‫أو‬ ً‫كوك‬ ‫بواسطة‬‫الطلب‬ ‫هٌدر‬ ‫و‬ ‫االستجابة‬ ‫الهٌدر‬ ‫بواسط‬ ‫الكوكي‬ ‫أو‬ ‫المستعرض‬ ‫جلسات‬ ‫بين‬ ‫الفرق‬(Session Cookie)‫السيرفر‬ ‫جلسات‬ ‫و‬(Session) ‫حيث‬ ‫من‬ ‫الفرق‬‫السيرفر‬ ‫جلسة‬‫المستعرض‬ ‫جلسة‬ ‫ماهيت‬‫تقطٌع‬ ‫جدول‬ ‫عن‬ ‫عبارة‬ ‫هو‬(hash table)ً‫كوك‬ ‫عن‬ ‫عبارة‬ ‫هو‬ ‫الجلسة‬ ‫وجود‬ ‫مكان‬‫السٌرفر‬ ‫ذاكرة‬ ً‫ف‬‫المستعرض‬ ‫ذاكرة‬ ً‫ف‬ ‫الزمنية‬ ‫المدة‬‫المستعرض‬ ‫تغلق‬ ‫لم‬ ‫أنك‬ ‫طالما‬‫المستعرض‬ ‫تغلق‬ ‫لم‬ ‫أنك‬ ‫طالما‬
  • 6. ‫توضيح‬ ‫مثال‬‫ي‬‫الجلسات‬ ‫عن‬ ‫السرفلت‬ ‫إلى‬ ‫ٌدخل‬ ‫مرة‬ ‫أو‬ ‫الزابر‬ ‫كان‬ ‫إذا‬ ‫نعرف‬ ‫سوف‬ ‫المثال‬ ‫بهذا‬‫ال‬ ‫أما‬‫الـ‬ ‫فٌه‬ ‫جدول‬ ‫ٌطبع‬ID‫ألول‬ ‫دخوله‬ ‫مرة‬(‫الجلسة‬ ‫إنشاء‬ ‫لحظة‬ ‫أي‬)‫هذا‬ ‫كل‬ ً‫ا‬‫طبع‬ ‫السرفلت‬ ‫زٌارة‬ ‫مرات‬ ‫وعدد‬ ‫السرفلت‬ ‫إلى‬ ‫دخول‬ ‫أخر‬ ‫وتارٌخ‬ ‫الجلسات‬ ‫باستخدام‬. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; /** Servlet that uses session tracking to keep per-client * access counts. Also shows other info about the session. */ public class ShowSession extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); HttpSession session = request.getSession(); String heading; Integer accessCount = (Integer) session.getAttribute("accessCount"); if (accessCount == null) { accessCount = new Integer(0); heading = "Welcome, Newcomer"; } else { heading = "Welcome Back"; accessCount = new Integer(accessCount.intValue() + 1); } //Integer is an immutable data structure. So, you //cannot modify the old one in-place. Instead, you // have to allocate a new one and redo setAttribute. session.setAttribute("accessCount", accessCount); PrintWriter out = response.getWriter(); String title = "Session Tracking Example"; String docType ="<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0"+" Transitional//EN">n"; out.println(docType + "<HTML>n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>n" + "<BODY BGCOLOR="#FDF5E6">n" + "<CENTER>n" +"<H1>" + heading + "</H1>n" + "<H2>Information on Your Session:</H2>n" + "<TABLE BORDER=1>n" +"<TR BGCOLOR="#FFAD00">n" + " <TH>Info Type<TH>Valuen" +"<TR>n" +" <TD>IDn" + " <TD>" + session.getId() + "n" +"<TR>n" +" <TD>Creation Timen" + " <TD>" +new Date(session.getCreationTime()) + "n" + "<TR>n" +" <TD>Time of Last Accessn" + " <TD>" +new Date(session.getLastAccessedTime()) + "n" + "<TR>n" +" <TD>Number of Previous Accessesn" + " <TD>" + accessCount + "n" +"</TABLE>n" +"</CENTER></BODY></HTML>"); } }
  • 7. ‫تسوق‬ ‫عربة‬ ‫مثال‬‫الجلسات‬ ‫باستخدام‬ ‫وأجاص‬ ‫وبرتقال‬ ‫تفاح‬ ً‫ه‬ ‫المشترٌات‬ ‫من‬ ‫قوابم‬ ‫ثالث‬ ‫عرض‬ ‫ٌتم‬ ‫بسٌط‬ ‫مثال‬ ‫هذا‬‫سوف‬ ‫الذي‬ ‫الشًء‬ ‫على‬ ‫تشر‬ ‫سرفلت‬ ‫إلى‬ ‫أسالك‬ ‫فٌتم‬ ‫إرسال‬ ‫على‬ ‫تضغط‬ ‫عندما‬ ‫عربة‬ ‫إلى‬ ‫تضٌفه‬Cart‫بشرابه‬ ‫قمت‬ ‫ما‬ ‫ٌضٌف‬ ‫سوف‬ ‫الذي‬ ‫سرفلت‬ ‫إلى‬ ‫بإرسالك‬ ‫ٌقوم‬ ‫ثمة‬ ‫ومن‬ ‫الجلسة‬ ‫إلى‬Cart2‫سوف‬ ‫الذي‬‫بشرابه‬ ‫قمت‬ ‫ما‬ ‫ٌعرض‬. ‫صفحة‬ ‫لدٌنا‬ ‫إذا‬html‫وسرفلتان‬Cart‫و‬Cart2 ‫صفحة‬html <HTML> <HEAD> <TITLE>Fruits Online</TITLE> </HEAD> <BODY bgcolor=#CCffCC> <CENTER><H1>We have these goodies</H1></CENTER> <HR> <FORM ACTION="Cart" METHOD="post"> <TABLE CELLSPACING="5" CELLPADDING="5"> <TR> <TD ALIGN="center"><B>Add to Cart</B></TD> <TD ALIGN="center"></TD> <TD ALIGN="center"></TD> </TR> <TR> <TD ALIGN="center"><INPUT TYPE="Checkbox" NAME="item_a" VALUE="apple $1"></TD> <TD ALIGN="left">apple</TD> </TR> <TR> <TD ALIGN="center"><INPUT TYPE="Checkbox" NAME="item_b" VALUE="orange $2"></TD> <TD ALIGN="left">orange</TD> </TR> <TR> <TD ALIGN="center"><INPUT TYPE="Checkbox" NAME="item_c" VALUE="pear $3"></TD> <TD ALIGN="left">pear</TD> </TR> </TABLE> <HR><BR> <CENTER> Press <INPUT TYPE="Submit" NAME="Cart1_submit" VALUE="Submit"> to submit your order. </CENTER> </FORM> </BODY> </HTML>
  • 8. ‫السرفلت‬ ‫إلى‬ ً‫نأت‬ ‫اآلن‬Cart‫ال‬ ‫هذا‬ ‫ومهمت‬‫س‬‫هو‬ ‫رفلت‬‫صفحة‬ ‫من‬ ‫القٌم‬ ‫أخذ‬html‫بنٌة‬ ‫الجلسة‬ ً‫ف‬ ‫ووضعها‬ ً‫ٌل‬ ‫كما‬ ‫ستكون‬ ‫الجلسة‬: itemCountً‫ف‬ ‫األغراض‬ ‫عدد‬‫العربة‬‫نمط‬ ‫من‬ ‫وهو‬Integer items‫شكل‬ ‫من‬ ‫مصفوفة‬ ‫عن‬ ‫عباة‬ ‫هو‬Vector‫وفٌها‬‫أسماء‬ ‫األشٌاء‬‫بشرابها‬ ‫قمت‬ ً‫الت‬ ‫هو‬ ‫السرفلت‬ ‫هذا‬ ‫كود‬ import javax.servlet.*; //Souce code for Cart servlet invoked when the web form cart.Html is submitted import javax.servlet.http.*; import java.io.*; import java.util.*; public class Cart extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* Retreieve the session object or create a new one. */ HttpSession session = request.getSession(true); Integer itemCount = (Integer) session.getValue("itemCount"); Vector items = (Vector) session.getValue("items"); /* If no item has been selected so far, set the count to zero and create a vector. */ if (itemCount == null) { itemCount = new Integer(0); items = new Vector( ); } // It is recommended that you obtain the session object prior to writing any output. PrintWriter out = response.getWriter( ); response.setContentType("text/html"); /* Retrieve form data */ Enumeration keys; String name, value, prefix; int count = itemCount.intValue( ); keys = request.getParameterNames(); while (keys.hasMoreElements()) { name = (String)keys.nextElement(); prefix = name.substring(0,4); out.println("name=" + name + " prefix=" + prefix); if (prefix.equals("item")) { // add item to list of items value = request.getParameter(name); out.println("adding to items:" + value + " count=" + count); items.add(value); count++; }//end if } //end while itemCount = new Integer(count); session.putValue("itemCount", itemCount); if (items != null) session.putValue("items", items); /* Issue a redirect to send the cookies and invoke another servlet to generate a display of the items in the shopping cart */ response.sendRedirect("http://localhost:8085/sessions/Cart2"); } //end doPost } //end class
  • 9. ‫السرفلت‬ ‫إذا‬Cart‫السرفلت‬ ‫إلى‬ ‫ٌنقلنا‬ ‫الجلسة‬ ‫إلى‬ ‫المشترٌات‬ ‫أدخال‬ ‫بعد‬Cart2‫بطباعة‬ ‫ٌقوم‬ ‫السرفبت‬ ‫هذا‬ ‫المشترٌات‬‫وأسعارها‬‫هو‬ ‫السرفلت‬ ‫هذا‬ ‫كود‬ ‫التدريب‬ ‫اجل‬ ‫من‬ ‫وجبات‬ ‫بإعادة‬ ‫قم‬‫الجلسات‬ ‫فكرة‬ ‫على‬ ‫تعمل‬ ‫أن‬ ‫على‬ ‫اللعبة‬ ‫برمجة‬ // Servlet to view what is in the shopping cart (as recorded by the use a session object in the Cart servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class Cart2 extends HttpServlet { /* View items in shopping cart */ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // Retreieve the session object, if any HttpSession session = req.getSession(false); Integer itemCount; Vector items = null; if (session == null) { //no session object has been created itemCount = new Integer(0); } else { itemCount = (Integer) session.getValue("itemCount"); items = (Vector) session.getValue("items"); } // It is recommended that you obtain the session object // prior to writing any output. PrintWriter out = res.getWriter( ); res.setContentType("text/html"); out.println("<html>"); out.println("<head><title>Servlet Response" + "</title></head>"); out.println("<body>"); out.println("<body bgcolor="beige">"); out.println ("Contents of your shopping cart " + " using session object<UL>"); int count = itemCount.intValue( ); /* Retrieve the items from the session object*/ for (int i = 0; i < count; i++) out.println("<LI>" + items.get(i)); out.println("</UL>"); out.println("<HR>"); out.println("</body></html>"); } // end doGet } // end Cart2