การดำเนินการข้ามโดเมนของคุกกี้ดูเหมือนจะเป็นปัญหาง่ายๆ เนื่องจากคุณจำเป็นต้องระบุแอตทริบิวต์โดเมนเป็นชื่อโดเมนรากของเว็บไซต์ที่ระบุเท่านั้น
อย่างไรก็ตาม ผู้เขียนพบปัญหาบางอย่างระหว่างการใช้งานจริง ซึ่งคุ้มค่าที่จะ
สังเกต
คุกกี้ในชื่อโดเมนหลัก www สร้างไว้ใต้และเขียนแอตทริบิวต์ Domain เช่น: (เพื่อความสะดวกในการแก้ไขจุดบกพร่อง รหัสต่อไปนี้เป็นรหัส asp ทั้งหมด)
รหัส:
Write.asp
<%
Response.Cookies(CookieName)("ชื่อผู้ใช้") = "SunBird"
Response.Cookies(CookieName)("รหัสผ่าน") = "xyz1234"
Response.Cookies(CookieName).Domain = "xxxx.com"
-
โค้ด
Read.aspสำหรับการอ่านคุกกี้จะอยู่ในไดเร็กทอรีเดียวกัน
: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 อีกครั้งเพื่อล้างข้อมูล ทุกอย่างเรียบร้อยดี และดูเหมือนว่าจะไม่มีปัญหาใดๆ
แต่มีปัญหาเมื่อใช้วิธีนี้กับไซต์จริง
คำอธิบายปัญหา:
ทุกอย่างเรียบร้อยดีเมื่อเข้าสู่ระบบครั้งแรก ชื่อโดเมนย่อยทั้งหมดสามารถเข้าถึงคุกกี้ที่จัดเก็บไว้ในชื่อโดเมนหลักได้ อย่างไรก็ตาม เมื่อคุณออกจากระบบ คุกกี้ของชื่อโดเมนย่อยจะถูกล้าง แต่คุกกี้ของชื่อโดเมนหลักจะถูกล้าง ยังคงเก็บไว้ หลังจากบังคับให้ล้างคุกกี้ของชื่อโดเมนหลัก ไม่ว่าคุณจะลงชื่อเข้าใช้ชื่อโดเมนหลักอย่างไร คุกกี้จะไม่สามารถบันทึกได้เว้นแต่คุณจะปิดเบราว์เซอร์แล้วเปิดใหม่อีกครั้ง
หลังจากพยายามหลายครั้ง ฉันพบปัญหาโดยไม่ได้ตั้งใจ ต่อไปนี้เป็นกระบวนการทดสอบ
สร้างเพจ 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 โดยตรงเพื่อสร้างคุกกี้ใหม่