ขั้นแรกให้ดำเนินการตรวจสอบตามปกติเหล่านี้:
- ตรวจสอบให้แน่ใจว่า
session_start();ถูกเรียกก่อนที่จะมีการเรียกเซสชันใด ๆ ดังนั้นการเดิมพันที่ปลอดภัยคือการวางไว้ที่จุดเริ่มต้นของหน้าเว็บทันทีหลังจากการ<?phpประกาศเปิดก่อนสิ่งอื่นใด ตรวจสอบให้แน่ใจว่าไม่มีช่องว่าง / แท็บก่อนการ<?phpประกาศเปิด
- หลังจาก
headerเปลี่ยนเส้นทางแล้วให้สิ้นสุดสคริปต์ปัจจุบันโดยใช้exit();(มีคนอื่นแนะนำsession_write_close();และsession_regenerate_id(true)คุณสามารถลองใช้สิ่งเหล่านี้ได้เช่นกัน แต่ฉันจะใช้exit();)
- ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานคุกกี้ในเบราว์เซอร์ที่คุณใช้เพื่อทดสอบ
- ตรวจสอบให้แน่ใจว่า
register_globalsปิดอยู่คุณสามารถตรวจสอบสิ่งนี้ในphp.iniไฟล์และใช้ไฟล์phpinfo(). อ้างถึงนี้เป็นวิธีการที่จะปิด
- ตรวจสอบว่าคุณไม่ได้ลบหรือทำให้เซสชันว่างเปล่า
- ตรวจสอบให้แน่ใจว่าคีย์ใน
$_SESSIONอาร์เรย์ superglobal ของคุณไม่ได้ถูกเขียนทับที่ใดก็ได้
- ตรวจสอบว่าคุณเปลี่ยนเส้นทางไปยังโดเมนเดียวกัน ดังนั้นการเปลี่ยนเส้นทางจาก a
www.yourdomain.comถึงyourdomain.comจะไม่ส่งต่อเซสชันไปข้างหน้า
- ตรวจสอบให้แน่ใจว่านามสกุลไฟล์ของคุณคือ
.php(มันเกิดขึ้น!)
ตอนนี้สิ่งเหล่านี้เป็นข้อผิดพลาดที่พบบ่อยที่สุด แต่ถ้าพวกเขาไม่ได้ทำตามเคล็ดลับปัญหามักจะเกิดกับ บริษัท โฮสติ้งของคุณ หากทุกอย่างทำงานlocalhostได้ แต่ไม่ได้อยู่บนเซิร์ฟเวอร์ระยะไกล / การทดสอบของคุณสิ่งนี้น่าจะเป็นตัวการ ดังนั้นตรวจสอบฐานความรู้ของผู้ให้บริการโฮสติ้งของคุณ (ลองใช้ฟอรัมของพวกเขาเป็นต้น) สำหรับ บริษัท เช่น FatCow และ iPage session_save_pathพวกเขาต้องการให้คุณระบุ เป็นเช่นนี้:
session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();
(แทนที่ "เส้นทางโฮมไดเร็กทอรีของคุณ" ด้วยพา ธ โฮมไดเร็กทอรีจริงของคุณซึ่งโดยปกติจะอยู่ภายในแผงควบคุมของคุณ (หรือเทียบเท่า) แต่คุณยังสามารถสร้างtest.phpไฟล์บนไดเร็กทอรีรากของคุณและพิมพ์:
<?php echo $_SERVER['SCRIPT_FILENAME']; ?>
บิตก่อน 'test.php' คือพา ธ โฮมไดเร็กทอรีของคุณ และแน่นอนตรวจสอบให้แน่ใจว่าโฟลเดอร์นั้นมีอยู่จริงในไดเรกทอรีรากของคุณ (บางโปรแกรมไม่อัปโหลดโฟลเดอร์ว่างเมื่อทำการซิงโครไนซ์)