เมื่อไม่กี่วันก่อน เว็บไซต์ของบริษัทมีระบบบริการลูกค้า เนื่องจากเว็บไซต์ดังกล่าวเป็นพื้นที่เช่า จึงไม่เพียงพอที่จะจัดเก็บระบบของลูกค้า เราจึงตั้งค่าเซิร์ฟเวอร์อื่นเพื่อรวมชื่อโดเมน (ชื่อโดเมน) ของเซิร์ฟเวอร์อื่นเหมือนกับเซิร์ฟเวอร์เดิม) ชื่อโดเมนแตกต่างกันเกินไป) ดังนั้นฉันจึงรวมระบบลูกค้านี้ไว้ในเว็บไซต์เดิมโดยใช้เฟรมเวิร์ก แต่พบปัญหาบางอย่าง เนื่องจากการดำเนินการข้ามโดเมน ปัญหาการสูญเสียเซสชันเกิดขึ้นหลังจากที่ผู้ใช้ระบบของลูกค้าเข้าสู่ระบบ ซึ่งทำให้ฉันลำบากใจมาทั้งวัน ฉันยังโพสต์ที่นี่เพื่อขอวิธีแก้ไขด้วย net/dispbbs.asp ?boardID=10&ID=167628&page=3. หลังจากค้นหาข้อมูลมาหลายวิธี ในที่สุดฉันก็แก้ไขปัญหานี้ได้ด้วยการวิเคราะห์และการทดลองของตัวเอง วันนี้ฉันเห็นมีคนขอโปรแกรม เลยเขียนโพสต์นี้ให้ทุกคนแชร์
ก่อนอื่นให้อธิบายหลักการ:
ระบบจะจดจำขอบเขตของแต่ละโปรแกรม โดยทั่วไป IE จะมีค่าเริ่มต้นอยู่ที่ขอบเขตของโปรแกรม
เนื่องจากเฟรมเวิร์กมีเนื้อหาข้ามโดเมน อันดับแรกจึงกำหนดขอบเขตโปรแกรมของตัวโปรแกรมเฟรมเวิร์กเป็นค่าเริ่มต้น เพื่อไม่ให้ยืนยันขอบเขตโปรแกรมภายในเฟรมเวิร์กได้
เพื่อให้ IE นี้เป็นค่าเริ่มต้นสำหรับขอบเขตโปรแกรมภายในเฟรม ฉันจึงใช้การข้ามหลายครั้ง
ขั้นแรก ให้กระโดดออกจากเฟรมนี้แล้วเข้าสู่หน้าเว็บไซต์แบบไร้เฟรมที่ต้องใช้ค่าเซสชัน (เรียกว่าเพจของเซิร์ฟเวอร์ B) และสร้างเซสชันในหน้านี้เพื่อให้ระบบสามารถสร้าง sessionID ได้โดยอัตโนมัติ จากนั้นข้ามกลับไปที่ หน้าที่มีเฟรม เนื่องจากระบบได้สร้าง ID เซสชันสำหรับ IE นี้ ตราบใดที่ IE นี้ไม่ถูกปิด ระบบจะคิดว่า IE นี้อยู่ในขอบเขตของโปรแกรมนี้เสมอ ด้วยวิธีนี้ ค่าเซสชันที่สร้างใหม่ สามารถอยู่รอดได้ในไอดีนี้
นี้บรรลุวัตถุประสงค์ของการโกงระบบ
เพิ่มอีกอย่างหนึ่ง การกระโดดครั้งที่สองใช้วิธีอื่น เหตุผลก็คือ ฉันต้องละทิ้งข้อมูลนอกเฟรมและบันทึกข้อมูลภายในเฟรม
วิธีการกระโดดที่แตกต่างกันจะละทิ้งหรือบันทึกข้อมูลก่อนการกระโดด
การใช้งานโปรแกรม:
ไฟล์ 1:
ไฟล์เฟรมเวิร์ก: index.htm (ทำงานบนเซิร์ฟเวอร์ A)
<html>
<หัว>
<meta HTTP-EQUIV=เนื้อหาประเภทเนื้อหา=ข้อความ/html; charset=gb2312>
<title>อุตสาหกรรมประตู Qihao</title>
</หัว>
<แถว frameset=1,* border=0 frameborder=0>
<ชื่อเฟรม=การเลื่อน winBackLoad=noresize target=mainweb1 src=default_top.htm>
<ชื่อเฟรม=mainweb1 src=http://www.serverB.com/index.asp เลื่อน=อัตโนมัติ>
<โนเฟรม>
<ร่างกาย>
<p>หน้านี้ใช้เฟรม แต่เบราว์เซอร์ของคุณไม่รองรับเฟรมเหล่านั้น </p>
</ร่างกาย>
</ไม่มีเฟรม>
</เฟรมเซต>
</html>
ไฟล์ 2: index.asp (ทำงานบนเซิร์ฟเวอร์ B ฟังก์ชั่นในการข้ามและสร้าง sessionID)
<สคริปต์>
ถ้า (top.location !== self.location) {
top.location=self.location;
-
//จุดประสงค์ของ JS นี้คือการวิ่งนอกเฟรม
</สคริปต์>
-
ถ้า session(xm2)= แล้ว
เซสชั่น(xm2)=eee
'จุดประสงค์ของประโยคข้างต้นคือเพียงเพื่อใช้เซสชัน ให้ระบบสร้าง sessionID สำหรับ IE นี้ และตรวจสอบว่ามีการข้ามเพื่อหลีกเลี่ยงการทำให้เกิดการวนซ้ำไม่สิ้นสุดหรือไม่
-
<META HTTP-EQUIV=รีเฟรชเนื้อหา=0;URL='http://www.serverA.com/index.htm'>
-
ประโยคข้างต้นคือการกลับไปที่เฟรม หมายเหตุ: ใช้วิธีกระโดดข้างต้นเท่านั้น อย่าใช้วิธีกระโดดต่อไปนี้
อื่น
การตอบสนอง เปลี่ยนเส้นทาง index2.asp
'ประโยคข้างต้นเป็นการกระโดดอย่างแท้จริงเพื่อรันโปรแกรมบนเซิร์ฟเวอร์ B! หมายเหตุ: คุณสามารถกระโดดด้วยวิธีนี้เท่านั้น!
สิ้นสุดถ้า%>
หลังจากการกระโดดข้างต้น IE นี้มี ID เซสชันบนเซิร์ฟเวอร์ B อยู่แล้ว กล่าวอีกนัยหนึ่ง แม้ว่าเฟรมจะทำงานบนเฟรมหลักบนเซิร์ฟเวอร์ A แต่ก็สามารถมั่นใจได้ว่าเซสชันบนเซิร์ฟเวอร์ B จะไม่สูญหาย บรรลุผลข้ามโดเมน การดำเนินงาน วัตถุประสงค์