ขั้นแรกให้ดำเนินการตรวจสอบตามปกติเหล่านี้:
- ตรวจสอบให้แน่ใจว่า
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' คือพา ธ โฮมไดเร็กทอรีของคุณ และแน่นอนตรวจสอบให้แน่ใจว่าโฟลเดอร์นั้นมีอยู่จริงในไดเรกทอรีรากของคุณ (บางโปรแกรมไม่อัปโหลดโฟลเดอร์ว่างเมื่อทำการซิงโครไนซ์)