ทำไม session.cookie_lifetime ตั้งค่าเป็น 23 วัน [ปิด]


9

เท่าที่ฉันเข้าใจว่าอายุการใช้งานเซสชันที่ Drupal ถูก จำกัด โดยsession.gc_maxlifetimeการตั้งค่าคือค่าเริ่มต้นตั้งไว้ที่ 2.3 วัน

ถ้าเช่นนั้นการใช้งานsession.cookie_lifetimeจะถูกกำหนดเป็น 23 วันอย่างไร?

นี่คือตัวอย่างจาก settings.php:

/**
 * Set session lifetime (in seconds), i.e. the time from the user's last visit
 * to the active session may be deleted by the session garbage collector. When
 * a session is deleted, authenticated users are logged out, and the contents
 * of the user's $_SESSION variable is discarded.
 */
ini_set('session.gc_maxlifetime', 200000);

/**
 * Set session cookie lifetime (in seconds), i.e. the time from the session is
 * created to the cookie expires, i.e. when the browser is expected to discard
 * the cookie. The value 0 means "until the browser is closed".
 */
ini_set('session.cookie_lifetime', 2000000);

โปรดสมมติว่าฉันได้ตั้งค่าทั้งสองsession.gc_probabilityและsession.gc_divisor เป็น 1 เพียงเพื่อประโยชน์ของคำถามนี้


เพราะคุณไม่ต้องการให้คุกกี้หายตัวไปอย่างลึกลับ? คุณต้องการที่จะอยู่ที่นั่นเพื่อให้เซสชั่นสามารถถูกยกเลิกอย่างสง่างาม? สิ่งนี้ก่อให้เกิดปัญหาจริงหรือไม่สำหรับคุณ?
Mołot

แค่นั้นแหละ แต่จะเป็นการดีกว่าหรือไม่ที่จะทำให้คุกกี้หมดอายุในเวลา 40 ชั่วโมงและเซสชันเซิร์ฟเวอร์ที่ 51 ชั่วโมง ฉันหมายถึงอายุการใช้งานคุกกี้จะน้อยกว่าเวลาที่เซิร์ฟเวอร์หมดอายุ
user5858

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

คำตอบ:


16

ini_set ('session.gc_maxlifetime', 200000);

  1. ค่านี้ใช้สำหรับเซิร์ฟเวอร์
  2. มันคือการตั้งค่าสำหรับการรวบรวมขยะเซสชัน
  3. หากผู้ใช้เยี่ยมชมครั้งล่าสุดเกิดขึ้นก่อน 200000 เซสชันนี้มีสิทธิ์สำหรับการรวบรวมขยะ
  4. เนื่องจากเป็น GC ค่าเซสชันอาจถูกละทิ้งและไม่บังคับ หากการดำเนินการ GC เกิดขึ้นหลังจากเซสชันมีสิทธิ์ได้รับ GC จะมีการลบออก
ini_set('session.cookie_lifetime', 2000000);
  1. ค่านี้ใช้สำหรับเบราว์เซอร์

  2. นี่เป็นเวลาสูงสุดที่แน่นอนที่เบราว์เซอร์สามารถใช้งานคุกกี้นี้ได้

  3. ค่า 0 ที่นี่หมายถึงทันทีหรือเมื่อปิดเบราว์เซอร์

เพื่อตอบคำถามของคุณโดยเฉพาะ

  1. หากผู้ใช้ไม่ตีเซิร์ฟเวอร์กลับมาใน 2.3 วันเซสชันของเขาจะถูกลบเมื่อการรวบรวมขยะเซสชันทำงาน
  2. หากเขากดปุ่มบนหน้าหนึ่งบนเซิร์ฟเวอร์ทุก ๆ 2.2 (น้อยกว่า 2.3 วัน) เซสชันของเขาจะยังคงทำงานอยู่ แต่จะสามารถใช้งานได้จนถึง 23 วันนับจากเวลาที่สร้างเซสชันครั้งแรกเท่านั้น
  3. ดังนั้นความหมายคือsession.cookie_lifetimeอายุการใช้งานสูงสุดของเซสชัน

1
บันทึกตัวรวบรวมขยะที่น่าจะเป็น รายละเอียดเพิ่มเติม: stackoverflow.com/a/1270960
หลัก

คำตอบที่ดีนอกจากนี้ยังสามารถทำได้ใน php.ini ถ้าคุณมีการเข้าถึงที่บนเซิร์ฟเวอร์ของคุณเช่นใน/etc/php/5.6/fpm/php.iniปรับ (หรือเพิ่ม) session.gc_maxlifetime = 2000000การตั้งค่า: ขอบคุณ.
therobyouknow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.