PHP의 내장 가비지 수집기를 사용하는 대신 데비안이 cron 작업으로 PHP 세션을 정리하는 이유는 무엇입니까?


26

데비안과 파생어 (우분투)는 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

데비안은 /var/lib/php5PHP 세션 하이재킹을 막기 위해 (1733, 소유자 루트, 그룹 루트) 에 대해 매우 엄격한 권한을 설정하기 때문 입니다. 불행히도, 이것은 네이티브 PHP 세션 가비지 콜렉터가 작동하지 못하게합니다. 세션 파일을 볼 수 없기 때문입니다. 크론 작업은 루트로 실행되며 세션 파일을보고 정리할 수있는 충분한 액세스 권한이 있습니다.

편집 : 지원 문서 : 버그 # 267720 에 대한 응답으로 동작이 설정되었습니다 . ( php.ini이것은 스톡 파일에 이것에 대한 의견 이 있었지만, wheezy 기반의 PHP 설치에서 지금은 보이지 않습니다.)


/ var / lib / php5에있는 drmx-wx-wt (rooot-root)의 아파치 사용자는 아파치 사용자가 dir 내용 (sticky bit)을 쓸 수는 있지만 읽을 수는 없습니다. 그래서 PHP의 가비지 수집기가 세션 파일의 시간을 증발시킬 수 없으므로 삭제할 파일을 선택할 수 없다는 것을 이해합니다.
nulll

예, 맞습니다.
asciiphil

5

트래픽이 적은 사이트에서는 좀 더 안정적 일 것입니다 (하루에 수백 건의 조회수 만 발생하고 GC가 1,000 회 정도만 실행되는 경우 세션이 예상보다 오래 지속될 수 있음). 세션이 많을 경우 서버에서 기본 GC보다 덜 거칠지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.