php session กับ domain name ที่มี www และ ไม่มี www
ปวดหัวอยู่หลายวัน กับเรื่อง Session ของ PHP
เรื่องก็มีอยู่ว่า ใช้ Session ของ PHP ในหน้ารายวิชา เพื่อจำเลขประจำตัวของผู้ใช้ เพื่อนำมาใช้หาข้อมูลหรือเก็บข้อมูลของผู้ใช้ ในหน้าอื่น ๆ เช่น เก็บคะแนนในหน้า Pretest, Posttest, และการแสดงผลการเรียน เป็นต้น
ปัญหาคือ ใช้กับ Chrome แล้ว ปรากฏว่า Session หาย เมื่อคลิกกลับไปหน้าเมนูหลัก คือ พออยู่หน้ารายวิชา มี Session แจ้งบอกว่า ใคร กำลัง login อยู่ แต่พอคลิกกลับไปหน้าเมนูหลัก และคลิกกลับมาที่หน้าวิชาเดิม ปรากฏว่า ไม่เห็นมีชื่อคนที่ login ทั้ง ๆ ที่ยังไม่ได้ logout
ใช้กับ Browser อื่น ๆ เช่น IE กลับไม่มีปัญหาอะไร ใช้ได้ตามปกติ
สาเหตุ
Server ที่ใช้งาน กำหนด Domain โดยไม่ต้องมี www นำหน้า เช่น elearning-xyz.net ก็เข้าไปที่เว็บได้เลย
การลิงค์จากหน้าเมนูหลัก ไปยังหน้าวิชา ใช้การลิงค์แบบไม่มี www เช่น elearning-xyz.para.htmlดูเหมือนว่า Chrome จะไม่เติม www นำหน้าให้ แต่ Browse เติมให้ เป็น www.elearning-xyz.net/para.html จึงทำให้ Session ยังคงอยู่
ผมก็ไปแก้ลิงค์ใหม่ ให้เป็น www.elearning-xyx.net/para.html ทั้งหมด ดูเหมือนว่า จะแก้ปัญหา ไปได้
แต่ก็เจอปัญหาใหม่อีก คือ คลิกให้แสดงผลการเรียนของผู้ที่กำลัง login อยู่ แต่ปรากฏว่า ไปเอาผลการเรียนของคนอื่น มาแสดง
ตรวจสอบดู ก็พบว่า Domain ที่มี www นำหน้า กับ Domain ที่ไม่มี www นำหน้า มี Session คนละตัวกัน ลิงค์ที่ไปเรียกใช้งาน เป็นลิงค์ที่ไม่มี www นำหน้า จึงเป็น Session ของ คนอื่น ไป ต้องไปแก้ ลิงค์ใหม่ให้เหมือนกัน จึงทำให้แก้ปัญหาไปได้
Domain ที่มี www นำหน้า
Domain ที่ไม่มี www นำหน้า
สรุปว่า
การใช้ Session ของ PHP ต้องระวังเรื่อง Domain ถ้าไม่เหมือนกัน Session ก็จะเป็นคนละตัวกัน และ ถ้า Domain ไม่มี www นำหน้า ก็จะมีปัญหากับ Chrome
อ้างอิง
http://stackoverflow.com/questions/8247842/session-data-lost-in-chrome-only
http://stackoverflow.com/questions/6784654/different-session-with-urls-with-www-and-without-www
http://stackoverflow.com/questions/8280994/how-to-write-session-for-both-www-and-non-www-version-of-my-domain
เรื่องก็มีอยู่ว่า ใช้ Session ของ PHP ในหน้ารายวิชา เพื่อจำเลขประจำตัวของผู้ใช้ เพื่อนำมาใช้หาข้อมูลหรือเก็บข้อมูลของผู้ใช้ ในหน้าอื่น ๆ เช่น เก็บคะแนนในหน้า Pretest, Posttest, และการแสดงผลการเรียน เป็นต้น
ปัญหาคือ ใช้กับ Chrome แล้ว ปรากฏว่า Session หาย เมื่อคลิกกลับไปหน้าเมนูหลัก คือ พออยู่หน้ารายวิชา มี Session แจ้งบอกว่า ใคร กำลัง login อยู่ แต่พอคลิกกลับไปหน้าเมนูหลัก และคลิกกลับมาที่หน้าวิชาเดิม ปรากฏว่า ไม่เห็นมีชื่อคนที่ login ทั้ง ๆ ที่ยังไม่ได้ logout
ใช้กับ Browser อื่น ๆ เช่น IE กลับไม่มีปัญหาอะไร ใช้ได้ตามปกติ
สาเหตุ
Server ที่ใช้งาน กำหนด Domain โดยไม่ต้องมี www นำหน้า เช่น elearning-xyz.net ก็เข้าไปที่เว็บได้เลย
การลิงค์จากหน้าเมนูหลัก ไปยังหน้าวิชา ใช้การลิงค์แบบไม่มี www เช่น elearning-xyz.para.htmlดูเหมือนว่า Chrome จะไม่เติม www นำหน้าให้ แต่ Browse เติมให้ เป็น www.elearning-xyz.net/para.html จึงทำให้ Session ยังคงอยู่
ผมก็ไปแก้ลิงค์ใหม่ ให้เป็น www.elearning-xyx.net/para.html ทั้งหมด ดูเหมือนว่า จะแก้ปัญหา ไปได้
แต่ก็เจอปัญหาใหม่อีก คือ คลิกให้แสดงผลการเรียนของผู้ที่กำลัง login อยู่ แต่ปรากฏว่า ไปเอาผลการเรียนของคนอื่น มาแสดง
ตรวจสอบดู ก็พบว่า Domain ที่มี www นำหน้า กับ Domain ที่ไม่มี www นำหน้า มี Session คนละตัวกัน ลิงค์ที่ไปเรียกใช้งาน เป็นลิงค์ที่ไม่มี www นำหน้า จึงเป็น Session ของ คนอื่น ไป ต้องไปแก้ ลิงค์ใหม่ให้เหมือนกัน จึงทำให้แก้ปัญหาไปได้
Domain ที่มี www นำหน้า
Domain ที่ไม่มี www นำหน้า
สรุปว่า
การใช้ Session ของ PHP ต้องระวังเรื่อง Domain ถ้าไม่เหมือนกัน Session ก็จะเป็นคนละตัวกัน และ ถ้า Domain ไม่มี www นำหน้า ก็จะมีปัญหากับ Chrome
อ้างอิง
http://stackoverflow.com/questions/8247842/session-data-lost-in-chrome-only
http://stackoverflow.com/questions/6784654/different-session-with-urls-with-www-and-without-www
http://stackoverflow.com/questions/8280994/how-to-write-session-for-both-www-and-non-www-version-of-my-domain
ความคิดเห็น
แสดงความคิดเห็น