سؤال

نظرًا لأن HTTP هو بروتوكول عديمة الجنسية ، عندما يقدم العميل عددًا من الطلبات إلى الخادم ، فإن كيف يحدد الخادم طلبات عميل معينة بشكل فريد على مدى فترة من الزمن ، يقول T1 ، T2 ، T3 ..

لقد تصفحت الويب وصادفت شروطًا مثل معرف الجلسة وإعادة كتابة عنوان URL وملفات تعريف الارتباط. ولكن سيكون من الرائع أن يشرح ذلك أحدهم بطريقة أفضل. على وجه التحديد أي جزء من طلب HTTP والاستجابة سيتم استخدامه لتتبع الجلسة؟

هل كانت مفيدة؟

المحلول

كما ذكرت ، تشمل الطرق الشائعة لتنفيذ تتبع جلسة HTTP إعادة كتابة عنوان URL وملفات تعريف الارتباط. يتطلب تتبع الجلسة بشكل أساسي الحفاظ على معرف الجلسة عبر طلبات متعددة إلى الخادم. هذا يعني أنه في كل مرة يقدم فيها عميل معين طلبًا إلى الخادم ، فإنه يمرر نفس معرف الجلسة. يمكن للخادم استخدام هذا المعرف للبحث عن معلومات الجلسة التي تحتفظ بها.

عند استخدام ملفات تعريف الارتباط ، يطلب الخادم من العميل تخزين ملف تعريف الارتباط عن طريق ضبط Set-Cookie رأس استجابة HTTP. يحتوي ملف تعريف الارتباط هذا على معرف الجلسة الفريد المعين لهذا العميل - في هذا المثال ، السلسلة "ABAD1D":

    Set-Cookie: JSESSIONID=ABAD1D;path=/

ثم يتم إرسال ملف تعريف الارتباط إلى الخادم بواسطة العميل باستخدام Cookie رأس طلب HTTP على كل طلب ، وبالتالي يتم إبلاغ الخادم في كل طلب معرف الجلسة المعين حاليًا للعميل.

    Cookie: JSESSIONID=ABAD1D

عند استخدام إعادة كتابة عنوان URL ، يتم إرسال معرف الجلسة نفسه بدلاً من ذلك في مكان ما في عنوان URL. مرة أخرى ، يستخرج الخادم معرف الجلسة من عنوان URL بحيث يمكنه البحث في الجلسة لعميل معين:

    http://my.app.com/index.jsp;JSESSIONID=ABAD1D

ومع ذلك ، يجب على الخادم أيضًا التأكد من إعادة كتابة أي عناوين URL في صفحات الويب المرسلة إلى العميل لاحتواء معرف جلسة عملاء معينين. نظرًا لأن معرف الجلسة مشفر في عناوين URL ، فإن طريقة تتبع الجلسة شفافة للمتصفح. غالبًا ما يلجأ الخادم إلى إعادة كتابة عنوان URL إذا وجد أنه غير قادر على تعيين ملف تعريف ارتباط للجلسة على العميل - مما يعني ضمناً أن العميل لا يدعم/يسمح لملفات تعريف الارتباط.

لاحظ أن الجلسات يمكن أن تنتهي. هذا يعني أنه إذا لم يرى الخادم معرف جلسة معين لفترة من الزمن ، فقد يؤدي ذلك إلى إزالة بيانات الجلسة للحفاظ على الموارد.

نصائح أخرى

على وجه التحديد أي جزء من طلب HTTP والاستجابة سيتم استخدامه لتتبع الجلسة؟

في استجابة HTTP ، يمكن للخادم تعيين ملف تعريف الارتباط. يفعل ذلك مع رأس cookie set. فمثلا:

Set-Cookie: session=12345; path=/

يقوم العميل بعد ذلك بإرجاع قيمة جميع ملفات تعريف الارتباط التي تتطابق مع الخصائص التي تم تعيينها مع ملف تعريف الارتباط ، والتي يمكن أن تشمل المسار (على النحو الوارد أعلاه) والمجال ، والتي لم تنته بعد.

يتم إرسال ملف تعريف الارتباط إلى الخادم كجزء من رؤوس HTTP. فمثلا:

Cookie: session=12345

لم يتم إرسال أي من معلومات الملكية الأصلية مع ملف تعريف الارتباط.

يسمح ملف تعريف الارتباط الفريد للخادم بربط مفتاح فريد من نوعه بمثيل متصفح معين. يمكن للخادم بعد ذلك استخدام هذا المفتاح كفهرس في جدول التجزئة أو جدول قاعدة البيانات الذي يحمل معلومات فريدة لكل مستخدم.

تتبع الجلسة هو شيء من جانب الخادم.

يصدر خادم الويب بعض معرف الجلسة الذي يتم إرجاعه إلى المتصفح. يقدم المتصفح معرف الجلسة هذا مع كل طلب.

ربما يتم ذلك باستخدام ملفات تعريف الارتباط بشفافية للمستخدم.

يتم التعامل مع الدورة في معظم الحالات عن طريق إرسال ملف بسكويت إلى العميل. سيتم إرسال ملف تعريف الارتباط هذا إلى الخادم على كل طلب من هذا العميل بالذات.

ال session id سوف يرتبط ببعض الموارد على جانب الخادم (ملف ، ذاكرة الوصول العشوائي) ، لذا فإن الخادم من خلال قراءة session id في ملف تعريف الارتباط يمكن أن يجد هذا المورد ومن ثم معرفة العميل الذي كان عليه.

ابحث عن تفاصيل كافية هنا

جلسات HTTP هي النهج الموصى به. تحدد الجلسة الطلبات التي تنشأ من نفس المتصفح خلال فترة المحادثة. يمكن لجميع servlets مشاركة نفس الجلسة. يتم إنشاء JSessionID بواسطة الخادم ويمكن نقله إلى العميل من خلال ملفات تعريف الارتباط ، وإعادة كتابة عنوان URL (إذا تم إيقاف تشغيل ملفات تعريف الارتباط) أو آلية SSL المدمجة. يجب توخي الحذر لتقليل حجم الكائنات المخزنة في الجلسة ويجب أن تكون الكائنات المخزنة في الجلسة قابلة للتسلسل. في جافا servlet ، يمكن الحصول على الجلسة على النحو التالي:

جلسة httpsession = request.getSession () ؛ // إرجاع الجلسة الحالية أو جلسة جديدة

يمكن توقيت الجلسات (تم تكوينها في web.xml) أو إبطالها يدويًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top