복붙노트

PHP 세션 파일 정리

PHP

PHP 세션 파일 정리

내 웹 사이트에서는 PHP 세션을 사용합니다. 세션 정보는 내 ./session 경로에있는 파일에 저장됩니다. 몇 달 후에 나는이 세션 파일이 절대로 삭제되지 않는다는 것을 발견했다.이 파일에는이 디렉토리에 145.000 개의 파일이있다.

어떻게 정리해야합니까? 프로그래밍 방식으로 수행해야합니까, 아니면이 정리 작업을 자동으로 수행 할 수있는 곳에서 사용할 수 있습니까?

EDIT 언급을 잊어 버렸습니다 :이 사이트는 공급자에서 실행되므로 명령 줄에 액세스 할 수 없습니다. 나는 ftp 액세스를 가지고 있지만 세션 파일은 다른 사용자 (웹 서버 프로세스가 실행하는 것으로 추측한다)에 속한다. 첫 번째 대답부터 서버 나 PHP의 설정이 아니라고 생각한다. PHP에서 그것을 위해 뭔가를 구현해야하고, 브라우저에서 주기적으로 호출해야합니다 (어쩌면 집에서 내 컴퓨터에서 실행되는 cron 작업에서)

해결법

  1. ==============================

    1.세션을 제대로 처리하려면 http://php.net/manual/en/session.configuration.php를 살펴보십시오.

    세션을 제대로 처리하려면 http://php.net/manual/en/session.configuration.php를 살펴보십시오.

    여기에서 이러한 변수를 찾을 수 있습니다.

    이들은 각 페이지 요청으로 실행되는 가비지 컬렉터 (GC) 확률을 제어합니다.

    스크립트 나 .htaccess 파일의 시작 부분에서 ini_set ()을 사용하여 설정하면 언젠가는 어느 정도 삭제 될 확률을 얻을 수 있습니다.

  2. ==============================

    2.데비안 / 우분투는 /etc/cron.d/php5에 정의 된 cronjob으로 이것을 처리합니다.

    데비안 / 우분투는 /etc/cron.d/php5에 정의 된 cronjob으로 이것을 처리합니다.

    # /etc/cron.d/php5: crontab fragment for php5
    #  This purges session files older than X, where X is defined in seconds
    #  as the largest value of session.gc_maxlifetime from all your php.ini
    #  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime
    
    # Look for and purge old sessions every 30 minutes
    09,39 *     * * *     root   [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm
    

    maxlifetime 스크립트는 php.ini를 검사하여 세션을 유지해야하는 시간 (분)을 반환합니다.

    #!/bin/sh -e
    
    max=1440
    
    for ini in /etc/php5/*/php.ini; do
            cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
            [ -z "$cur" ] && cur=0
            [ "$cur" -gt "$max" ] && max=$cur
    done
    
    echo $(($max/60))
    
    exit 0
    
  3. ==============================

    3.어떤 사람이 cron 작업으로이 작업을 수행하려는 경우 다음을 유의하십시오.

    어떤 사람이 cron 작업으로이 작업을 수행하려는 경우 다음을 유의하십시오.

    find .session/ -atime +7  -exec rm {} \;
    

    파일이 많을 때 정말 느립니다.

    다음과 같이 사용하는 것이 좋습니다.

    find .session/ -atime +7 | xargs -r rm
    

    파일 이름에 공백이있는 경우 다음을 사용하십시오.

    find .session/ -atime +7 -print0 | xargs -0 -r rm
    

    xargs는 삭제할 파일로 명령 행을 채운 다음 -exec rm {} \보다 훨씬 적은 rm 명령을 실행하여 각 파일에 대해 rm 명령을 호출합니다.

    그냥 내 두 센트

  4. ==============================

    4.find와 함께 cron을 사용하여 지정된 임계 값보다 오래된 파일을 삭제하십시오. 예를 들어, 일주일 이상 액세스하지 않은 파일을 삭제할 수 있습니다.

    find와 함께 cron을 사용하여 지정된 임계 값보다 오래된 파일을 삭제하십시오. 예를 들어, 일주일 이상 액세스하지 않은 파일을 삭제할 수 있습니다.

    find .session/ -atime +7  -exec rm {} \;
    
  5. ==============================

    5./etc/cron.hourly/php 스크립트를 만들고 거기에 넣을 수 있습니다 :

    /etc/cron.hourly/php 스크립트를 만들고 거기에 넣을 수 있습니다 :

    #!/bin/bash
    
    max=24
    tmpdir=/tmp
    
    nice find ${tmpdir} -type f -name 'sess_*' -mmin +${max} -delete
    

    그런 다음 스크립트를 실행 가능하게 만듭니다 (chmod + x).

    이제 매 시간마다 24 분 전에 수정 된 데이터로 모든 세션 파일이 삭제됩니다.

  6. ==============================

    6.

    # Every 30 minutes, not on the hour<br>
    # Grabs maxlifetime directly from \`php -i\`<br>
    # doesn't care if /var/lib/php5 exists, errs go to /dev/null<br>
    
    09,39 * * * *   find /var/lib/php5/ -type f -cmin +$(echo "\`php -i|grep -i session.gc_maxlifetime|cut -d' ' -f3\` / 60" | bc) -exec rm -f {} \\; >/dev/null 2>&1
    

    분류 : 파일 만 : find / var / lib / php5 / -type f 분 이상 경과 : -cmin PHP 설정 가져 오기 : $ (echo "`php -i | grep -i session.gc_maxlifetime 수학을하십시오 : | cut -d "-f3` / 60"| bc) RM 일치 파일 : -exec rm -f {} \;

  7. ==============================

    7.내 생각에 당신은 공유 서버에 있고 세션 파일을 모든 사용자가 섞어서 사용자가 삭제할 수 없으며 반드시 삭제해야합니다. 확장 및 / 또는 사용자 세션 개인 정보 보호에 대해 걱정할 경우 수행 할 수있는 작업은 세션을 데이터베이스로 이동하는 것입니다.

    내 생각에 당신은 공유 서버에 있고 세션 파일을 모든 사용자가 섞어서 사용자가 삭제할 수 없으며 반드시 삭제해야합니다. 확장 및 / 또는 사용자 세션 개인 정보 보호에 대해 걱정할 경우 수행 할 수있는 작업은 세션을 데이터베이스로 이동하는 것입니다.

    쿠키를 데이터베이스에 쓰기 시작하면 시간이되면 여러 서버에서 응용 프로그램을 확장하는 데 많은 시간이 걸립니다.

    그 외에도 145.000 파일에 대해서는 크게 걱정하지 않을 것입니다.

  8. ==============================

    8.cd to sessions 디렉토리에 다음을 입력하십시오.

    cd to sessions 디렉토리에 다음을 입력하십시오.

    1) 40 분 이상 경과 된 세션보기 :  찾아라. -amin +40 -exec stat -c "% n % y"{} \;

    2) 40 분 이상 지난 세션 삭제 : 찾아라. -amin +40 -exec rm {} \;

  9. ==============================

    9.cron 아래에서 사용 :

    cron 아래에서 사용 :

    39 20     * * *     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) -print0 | xargs -r -0 rm
    
  10. from https://stackoverflow.com/questions/654310/cleanup-php-session-files by cc-by-sa and MIT license