Mengapa Debian membersihkan sesi php dengan pekerjaan cron alih-alih menggunakan pengumpul sampah bawaan php?

26

Debian dan turunannya (Ubuntu) tidak menggunakan pemulung sampah sesi php

session.gc_probability = 0

sebagai gantinya mereka menggunakan 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

Mengapa Debian memilih untuk melakukan ini?

nulll
sumber

Jawaban:

29

Karena Debian menetapkan izin yang sangat ketat pada /var/lib/php5(1733, root pemilik, root grup) untuk mencegah pembajakan sesi PHP. Sayangnya, ini juga mencegah pengumpul sampah sesi PHP asli tidak berfungsi, karena tidak dapat melihat file sesi di sana. Pekerjaan cron dijalankan sebagai root, yang memang memiliki akses yang cukup untuk melihat dan membersihkan file sesi.

Sunting : Dokumentasi pendukung: Perilaku ini dibuat sebagai tanggapan terhadap bug # 267720 . (Dulu ada komentar di php.inifile stok tentang ini, tapi saya tidak melihat mereka di sana sekarang di install PHP berbasis wheezy.)

asciiphil
sumber
Perms pada / var / lib / php5 adalah drwx-wx-wt (rooot-root), sehingga pengguna apache dapat menulis isi direktori (bit lengket), tetapi tidak dapat membacanya. Jadi saya mengerti bahwa pemulung sampah php tidak akan dapat mengevaluasi nilai file sesi sehingga tidak dapat memilih file mana yang akan dihapus ... apakah saya benar?
nulll
Ya itu benar.
asciiphil
5

Itu mungkin akan sedikit lebih dapat diandalkan di situs dengan lalu lintas rendah (jika Anda hanya mendapatkan beberapa ratus hit sehari dan GC hanya menembak setiap seribu atau lebih, sesi mungkin bertahan lebih lama dari yang seharusnya) dan saya membayangkan itu mungkin sebuah sedikit kurang keras di server daripada GC asli jika Anda punya banyak sesi.

ceejayoz
sumber