ตัวแปร $ _SESSION เก็บไว้ที่ไหน


158

กำลัง$_SESSIONตัวแปรที่เก็บไว้ในไคลเอ็นต์หรือเซิร์ฟเวอร์หรือไม่


บนเซิร์ฟเวอร์ที่คุณเรียกใช้แอปพลิเคชัน php สำหรับเส้นทางที่เฉพาะเจาะจงคุณต้องตรวจสอบกับ phpinfo ()
densityx

คำตอบ:


168

ตำแหน่งของที่$_SESSIONเก็บตัวแปรถูกกำหนดโดยการsession.save_pathกำหนดค่าของ PHP โดยปกติจะ/tmpใช้ระบบ Linux / Unix ใช้phpinfo()ฟังก์ชั่นเพื่อดูการตั้งค่าเฉพาะของคุณหากไม่แน่ใจ 100% ด้วยการสร้างไฟล์ที่มีเนื้อหานี้ในDocumentRootโดเมนของคุณ:

<?php
    phpinfo();
?>

นี่คือลิงค์ไปยังเอกสาร PHP ในการตั้งค่าการกำหนดค่านี้:

http://php.net/manual/en/session.configuration.php#ini.session.save-path


129

ดังกล่าวแล้วเนื้อหาจะถูกเก็บไว้ที่เซิร์ฟเวอร์ อย่างไรก็ตามเซสชั่นจะถูกระบุโดย session-id ซึ่งเก็บไว้ที่ลูกค้าและส่งพร้อมกับคำขอแต่ละครั้ง โดยปกติแล้ว session-id จะถูกเก็บไว้ในคุกกี้ แต่ก็สามารถผนวกเข้ากับ URL ได้ (นั่นคือPHPSESSIDพารามิเตอร์ข้อความค้นหาที่คุณเห็น)


41
+1 เนื่องจากคุณบอกเป็นนัยว่าคุกกี้ไม่ได้จัดเก็บเนื้อหาของ $ _SESSION (เนื้อหาเหล่านี้ถูกจัดเก็บไว้บนเซิร์ฟเวอร์ดังนั้นจึงไม่เสี่ยงต่อการเปลี่ยนแปลงโดยไคลเอนต์)
shufler

12
คำตอบที่ยอดเยี่ยม! ฉันกำลังค้นหาคำถาม: "ทำไมเซสชันหมดอายุหลังจากลบแคชของเบราว์เซอร์" และคุณช่วยชีวิตฉันไว้
นักเรียน

2
เซิร์ฟเวอร์สร้างไฟล์ sess_7nu9p0fvidvva6ouaugqcc8292 และการแจ้งเตือนของเบราว์เซอร์ (getCookie ('PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb

2
Plus1 - สำหรับการตอบคำถาม: "... เก็บไว้ในไคลเอนต์หรือเซิร์ฟเวอร์"
Alex Vargas

22

โดยทั่วไปจะเก็บไว้ในเซิร์ฟเวอร์ ที่เก็บของพวกเขานั้นขึ้นอยู่กับคุณในฐานะนักพัฒนา คุณสามารถใช้session.save_handlerตัวแปรการกำหนดค่าและsession_set_save_handlerเพื่อควบคุมวิธีการบันทึกเซสชันบนเซิร์ฟเวอร์ วิธีการบันทึกเริ่มต้นคือการบันทึกเซสชันไปยังไฟล์ ที่ที่พวกเขาได้รับการบันทึกจะถูกควบคุมโดยsession.save_pathตัวแปร


18

สิ่งที่เพิ่มเติม: ควรสังเกตว่าในกรณี "/ tmp" เป็นไดเรกทอรีที่เก็บข้อมูลเซสชัน (ซึ่งดูเหมือนว่าจะเป็นค่าเริ่มต้น) เซสชันจะไม่คงอยู่หลังจากรีบูตเว็บเซิร์ฟเวอร์นั้นเป็น "/ tmp" "มักจะถูกล้างระหว่างรีบูต แนวคิดของการติดตาลูกค้าฉลาดยืนและตกอยู่กับการเก็บข้อมูลบนเซิร์ฟเวอร์ - ซึ่งอาจล้มเหลวหากใช้ไดเรกทอรี "/ tmp" สำหรับข้อมูลเซสชัน


13

บน Debian (ไม่ใช่กรณีนี้สำหรับ distros Linux ส่วนใหญ่ใช่หรือไม่) จะถูกบันทึกใน / var / lib / php5 / ดังกล่าวข้างต้นมันกำหนดค่าใน php.ini ของคุณ


12

ฉันใช้ Ubuntu และเซสชันของฉันถูกเก็บไว้ใน / var / lib / php5


1
ขอบคุณนั่นคือทั้งหมดที่ฉันต้องการ ใช่ถ้าพวกเขาไม่ได้อยู่ในจุดปกติฉันจะต้องเปิด INIs แต่ฉันแค่อยากจะรู้ว่า "เฮ้ซึ่งมักจะมีการจัดเก็บเซสชัน?" / var / lib / php / times / มันคือ
Eric L.

7

ดังที่นายเทย์เลอร์ชี้ให้เห็นว่าสิ่งนี้มักจะเกิดขึ้นใน php.ini โดยปกติจะจัดเก็บเป็นไฟล์ในไดเรกทอรีเฉพาะ



0

มันทำงานยังไง? รู้ได้อย่างไรว่าเป็นฉัน

เซสชันส่วนใหญ่ตั้งค่ารหัสผู้ใช้ (เรียกว่า sessionid) บนคอมพิวเตอร์ของผู้ใช้ที่มีลักษณะดังนี้: 765487cf34ert8dede5a562e4f3a7e12 จากนั้นเมื่อเปิดเซสชันในหน้าอื่นมันจะสแกนคอมพิวเตอร์เพื่อหารหัสผู้ใช้และเรียกใช้ไปยังเซิร์ฟเวอร์เพื่อรับตัวแปรของคุณ

หากคุณล้างแคชโดยไม่ตั้งใจแล้วรหัสผู้ใช้ของคุณจะถูกล้างออกด้วย คุณจะไม่สามารถรับตัวแปรจากเซิร์ฟเวอร์ได้อีกต่อไปเนื่องจากคุณไม่ทราบรหัสของคุณ


0

ในเซสชัน Ubuntu ของฉันจะถูกเก็บไว้ที่

/var/lib/php/sessions

และคุณต้องทำsudo lsในไดเรกทอรีนี้เท่านั้นที่lsจะโยน

ls: ไม่สามารถเปิดไดเรกทอรี '.': ปฏิเสธการอนุญาต

และในเซสชัน php เซิร์ฟเวอร์ Windows Wamp ของฉันจะถูกเก็บไว้

C:\wamp64\tmp

และถ้าคุณติดตั้ง php แบบสแตนด์อโลนบน windows ดังนั้นจะไม่มีการตั้งค่าตามค่าเริ่มต้น

session.save_path => no value => no value

-1

คำตอบหลายข้อข้างต้นเป็นแบบทึบ ในความคิดของฉันผู้เขียนคำถามนี้เพียงต้องการทราบว่าตัวแปรเซสชันถูกเก็บไว้โดยค่าเริ่มต้น ตามนี้: https://canvas.seattlecentral.edu/courses/937693/pages/10-advanced-php-sessionsพวกเขาจะเป็นเพียงการเก็บไว้ในเซิร์ฟเวอร์โดยค่าเริ่มต้น หวังว่าคนอื่นจะพบว่าการบริจาคนี้มีความหมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.