เหตุใด Debian จึงล้างข้อมูลเซสชัน php ด้วยงาน cron แทนที่จะใช้ตัวรวบรวมขยะในตัวของ php


26

เดเบียนและตราสารอนุพันธ์ (Ubuntu) ไม่ได้ใช้ตัวรวบรวมขยะเซสชัน php

session.gc_probability = 0

พวกเขาใช้ cron /etc/cron.d/php5 แทน

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

เหตุใดเดเบียนจึงเลือกทำเช่นนี้

คำตอบ:


29

เนื่องจาก Debian ตั้งค่าการอนุญาตที่เข้มงวดมากใน/var/lib/php5(1733, เจ้าของรูท, กลุ่มรูท) เพื่อป้องกันการจี้เซสชัน PHP น่าเสียดายที่นี่ยังช่วยป้องกันไม่ให้ตัวรวบรวมขยะเซสชันดั้งเดิมของ PHP ทำงานเนื่องจากไม่เห็นไฟล์เซสชันที่นั่น งาน cron รันในฐานะรูทซึ่งมีสิทธิ์เพียงพอในการดูและล้างไฟล์เซสชั่น

แก้ไข : เอกสารที่รองรับ: พฤติกรรมที่ถูกจัดตั้งขึ้นในการตอบสนองต่อข้อผิดพลาด # (เคยมีความคิดเห็นในphp.iniไฟล์หุ้นเกี่ยวกับเรื่องนี้ แต่ฉันไม่เห็นพวกเขามีตอนนี้ในการติดตั้ง PHP ตาม wheezy ของฉัน)


อนุญาตให้ใช้ / var / lib / php5 ar drwx-wx-wt (rooot-root) ดังนั้นผู้ใช้ apache สามารถเขียนเนื้อหา dir (บิตเหนียว) แต่ไม่สามารถอ่านได้ ดังนั้นฉันจึงเข้าใจว่าตัวรวบรวมขยะของ php จะไม่สามารถประเมินเวลาของไฟล์เซสชันดังนั้นจึงไม่สามารถเลือกไฟล์ที่จะลบได้ ... ฉันใช่ไหม?
nulll

ใช่ที่ถูกต้อง.
asciiphil

5

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

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