การดำเนินการข้ามโดเมนของคุกกี้ดูเหมือนจะเป็นปัญหาง่ายๆ เนื่องจากคุณจำเป็นต้องระบุแอตทริบิวต์โดเมนเป็นชื่อโดเมนรากของเว็บไซต์ที่ระบุเท่านั้น อย่างไรก็ตาม ผู้เขียนพบปัญหาบางอย่างระหว่างการใช้งานจริง ซึ่งคุ้มค่าแก่การ
สังเกต
คุกกี้ในชื่อโดเมนหลัก www สร้างไว้ใต้และเขียนแอตทริบิวต์ Domain เช่น: (เพื่อความสะดวกในการดีบักโค้ดต่อไปนี้เป็นโค้ด asp ทั้งหมด)
Write.asp
รหัสโปรแกรม
-
Response.Cookies(CookieName)("ชื่อผู้ใช้") = "SunBird"
Response.Cookies(CookieName)("รหัสผ่าน") = "xyz1234"
Response.Cookies(CookieName).Domain = "xxxx.com"
-
Read.asp
สำหรับการอ่านคุกกี้จะอยู่ในไดเรกทอรีเดียวกัน
รหัสโปรแกรม
-
Response.Write Request.Cookies(CookieName)("ชื่อผู้ใช้")
Response.เขียนคำขอ.Cookies(CookieName)("Password")
-
จากนั้นใส่เอกสาร Read.asp ลงในไซต์โดเมนย่อยอื่นโดยใช้โค้ดเดียวกันกับด้านบน สุดท้ายนี้ เราสร้าง Clear.asp อีกอันหนึ่งเพื่อล้างคุกกี้และวางไว้ใต้ชื่อโดเมนหลัก
Clear.asp
รหัสโปรแกรม
-
Response.Cookies(CookieName)("ชื่อผู้ใช้") = ""
Response.Cookies(ชื่อคุกกี้)("รหัสผ่าน") = ""
Response.Cookies(CookieName).Domain = "xxxx.com"
-
ตอนนี้คุณสามารถทดสอบตามลำดับการดำเนินการต่อไปนี้ Write.asp-->Read.asp ของชื่อโดเมนหลัก-->Read.asp ของชื่อโดเมนย่อย Write.asp จากนั้นเรียกใช้ Clear.asp เพื่อล้าง ทุกอย่างเรียบร้อยดี ดูเหมือนว่า http://bizhi.downcodes.com/ จะไม่มีปัญหา
แต่มีปัญหาเมื่อใช้วิธีนี้กับไซต์จริง
คำอธิบายปัญหา:
ทุกอย่างเรียบร้อยเมื่อเข้าสู่ระบบเป็นครั้งแรก ชื่อโดเมนย่อยใด ๆ สามารถเข้าถึงคุกกี้ที่จัดเก็บไว้ในชื่อโดเมนหลักได้ อย่างไรก็ตาม เมื่อคุณออกจากระบบ คุกกี้ของชื่อโดเมนย่อยจะถูกล้าง แต่คุกกี้ของชื่อโดเมนหลัก ชื่อโดเมนยังคงอยู่ โดยบังคับล้างชื่อโดเมน หลังจากตั้งค่าคุกกี้แล้ว ไม่ว่าคุณจะลงชื่อเข้าใช้ชื่อโดเมนหลักด้วยวิธีใดก็ตาม คุกกี้จะไม่สามารถบันทึกได้เว้นแต่คุณจะปิดเบราว์เซอร์แล้วเปิดใหม่อีกครั้ง
หลังจากพยายามหลายครั้ง ฉันพบปัญหาโดยไม่ได้ตั้งใจ ต่อไปนี้เป็นกระบวนการทดสอบ
สร้างเพจ Write2.asp และวางไว้ใต้ชื่อโดเมนหลัก
รหัสโปรแกรม
-
Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"
-
ขั้นตอนที่ 1: หลังจากปิดเบราว์เซอร์ ให้ดำเนินการตามลำดับต่อไปนี้: Write.asp-->Read.asp ของชื่อโดเมนหลัก-->Read.asp ของชื่อโดเมนย่อยใดๆ ที่ Read.asp ที่นี่จะอ่านได้ตามปกติ
ขั้นตอนที่ 2: Clear.asp-->Read.asp ของชื่อโดเมนหลัก-->Read.asp ของชื่อโดเมนย่อย การดำเนินการล้างข้อมูลสำเร็จที่นี่
ขั้นตอนที่ 3: Write.asp --> Write2.asp --> ชื่อโดเมนหลัก Read.asp --> ชื่อโดเมนย่อย Read.asp ณ จุดนี้ Read.asp ทั้งสองสามารถอ่านค่าคุกกี้ได้
ขั้นตอนที่ 4: ดำเนินการขั้นตอนที่ 2 อีกครั้ง และพบว่าชื่อโดเมนหลัก Read.asp ยังคงแสดงค่า ในขณะที่ค่าของ Read.asp ภายใต้ชื่อโดเมนย่อยได้ถูกล้างไปแล้ว
จากการทดสอบข้างต้น เราสรุปประเด็นต่อไปนี้ที่คุณต้องใส่ใจเมื่อใช้คุกกี้ข้ามโดเมน:
1. เมื่อคุณมีกลุ่มคุกกี้ (หรือพจนานุกรมคุกกี้) และใช้แอตทริบิวต์โดเมนเพื่อระบุชื่อโดเมน เมื่อคุณ แก้ไขหรือเพิ่มสมาชิกใหม่ในกลุ่ม เมื่อเพิ่ม ต้องแน่ใจว่าได้เพิ่มแอตทริบิวต์ Resonse.Cookies(CookieName).Domain หลังการดำเนินการ
2. หากไม่จำเป็น โปรดอย่าแก้ไขกลุ่มคุกกี้ของโดเมนที่กำหนดค่า ใช้ Response.Cookies("CookieText") = CookieValue โดยตรงเพื่อสร้างคุกกี้ใหม่