วันพฤหัสบดีที่ 14 สิงหาคม พ.ศ. 2557

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


ไม่มีความคิดเห็น:

แสดงความคิดเห็น