منذ أيام قليلة، كان موقع الشركة يحتوي على نظام خدمة العملاء، ولأن الموقع عبارة عن مساحة مستأجرة، لم تكن كافية لتخزين نظام العميل، لذلك قمنا بإعداد خادم آخر من أجل توحيد اسم المجال (اسم المجال). الخادم الآخر هو نفس الخادم الأصلي) كان اسم المجال مختلفًا جدًا)، لذلك قمت بتضمين نظام العميل هذا في موقع الويب الأصلي باستخدام إطار عمل، ولكن واجهت بعض المشكلات. بسبب العمليات عبر النطاقات، حدثت مشكلة فقدان الجلسة بعد تسجيل دخول مستخدم نظام العميل، الأمر الذي أزعجني لمدة يوم كامل، كما قمت بالنشر هنا لطلب الحلول، راجع: http://bbs.bc-cn. net/dispbbs.asp ?boardID=10&ID=167628&page=3. وبعد البحث عن المعلومات بعدة طرق، أخيراً قمت بحل هذه المشكلة من خلال تحليلي وتجاربي الخاصة، واليوم رأيت شخصاً يطلب برنامجاً، فكتبت هذه التدوينة ليشاركها الجميع.
أولا شرح المبدأ:
يتعرف النظام على نطاق كل برنامج بشكل عام، حيث يقوم IE بالإعداد الافتراضي لنطاق البرنامج.
نظرًا لأن إطار العمل يحتوي على محتوى عبر المجال، فإنه يتم تعيينه افتراضيًا أولاً على نطاق البرنامج الخاص ببرنامج إطار العمل نفسه، بحيث لا يمكن تأكيد نطاق البرنامج داخل الإطار.
من أجل جعل IE افتراضيًا لنطاق البرنامج داخل الإطار، استخدمت قفزات متعددة.
أولاً، اقفز خارج هذا الإطار وأدخل إلى صفحة موقع ويب بدون إطار تتطلب قيمة جلسة (أطلق عليها اسم صفحة الخادم B)، وقم بإنشاء جلسة في هذه الصفحة حتى يتمكن النظام من إنشاء معرف جلسة تلقائيًا، ثم انتقل مرة أخرى إلى الصفحة ذات الإطار نظرًا لأن النظام أنشأ معرف جلسة لـ IE هذا، طالما لم يتم إغلاق IE هذا، يعتقد النظام دائمًا أن IE هذا يقع ضمن نطاق هذا البرنامج، وبهذه الطريقة، فإن قيمة الجلسة التي تم إنشاؤها يمكن البقاء على قيد الحياة في هذا المعرف.
وهذا يحقق الغرض من غش النظام.
شيء آخر يجب إضافته، القفزة الثانية تستخدم طريقة مختلفة والسبب هو أنني بحاجة إلى تجاهل المعلومات خارج الإطار وحفظ المعلومات داخل الإطار.
ستتجاهل طرق القفز المختلفة المعلومات أو تحفظها قبل القفزة.
تنفيذ البرنامج:
الملف 1:
ملف الإطار: Index.htm (يعمل على الخادم A)
<أتش تي أم أل>
<الرأس>
<meta HTTP-EQUIV=Content-Type CONTENT=text/html;
<title>صناعة أبواب تشيهاو</title>
</الرأس>
<صفوف مجموعة الإطارات=1،* الحدود=0 حدود الإطارات=0>
<اسم الإطار=winBackLoad التمرير=لا يوجد هدف بحجم noresize=mainweb1 src=default_top.htm>
<اسم الإطار=mainweb1 src=http://www.serverB.com/index.asp التمرير=auto>
<الإطارات>
<الجسم>
<p>تستخدم هذه الصفحة الإطارات، لكن متصفحك لا يدعمها. </ص>
</الجسم>
</noframes>
</مجموعة الإطارات>
</html>
الملف 2: ملف Index.asp (يعمل على الخادم B، ويعمل على الانتقال وإنشاء معرف الجلسة)
<النص البرمجي>
إذا (top.location !== self.location) {
top.location=self.location;
}
// الغرض من JS هذا هو التشغيل خارج الإطار
</script>
<%
إذا كانت الجلسة (xm2) = إذن
جلسة (xm2)=eee
'الغرض من الجملة أعلاه هو فقط استخدام الجلسة، والسماح للنظام بإنشاء معرف جلسة لـ IE هذا، وتحديد ما إذا كان قد تم القفز عليه لتجنب التسبب في حلقة لا نهائية.
%>
<META HTTP-EQUIV=تحديث المحتوى=0;URL='http://www.serverA.com/index.htm'>
<%
، الجملة أعلاه هي العودة إلى الإطار، ملاحظة: استخدم فقط طريقة القفز أعلاه، ولا تستخدم طريقة القفز التالية.
آخر
Response.Redirect Index2.asp
'الجملة أعلاه هي القفزة الحقيقية لتشغيل البرنامج على الخادم B! ملحوظة: لا يمكنك القفز إلا بهذه الطريقة!
نهاية إذا٪>
بعد القفزة المذكورة أعلاه، أصبح لدى IE بالفعل معرف الجلسة على الخادم B. وبعبارة أخرى، على الرغم من أن الإطار يعمل على الإطار الرئيسي على الخادم A، إلا أنه يمكن أن يضمن عدم فقدان الجلسة على الخادم B، مما يحقق المجال المشترك الغرض.