2012-05-16 2 views
2

나는 시스템 (CakePHP 2.1)을 약 2 주 동안 작동 시켰고 방금 걸어 놓은 수천과 수천 개의 세션 파일을 삭제해야했다. 내가 그들을 지우고 나자 그들은 다시 굴러 들어 오기 시작했다. 나는 그것이 몇 시간 동안 실행하게했고 최대 426 개의 파일을 가지고있다. 시스템에서 10 명의 사용자가 정상입니까? 나는 화내는 엔진을 알려주는 robot.txt 파일을 가지고 있으며, 모든 페이지에서 https에 대한 인증과 인증을 받았습니다. 누군가 나를 위해 약간의 빛을 비춰 줄 수 있습니까?CakePHP가 소수의 사용자 만 사용하여 수백 개의 세션 파일을 app/tmp/sessions에 생성하는 것은 정상적인 동작입니까?

Configure::write('Session', array(
    'defaults' => 'cake', 
    'cookie' => 'scsys', 
    'timeout' => 600 
)); 

답변

1

이것은 나에게도 중요한 문제였습니다. 우리는 세션 파일의 1000 초를 초 단위로 얻고있었습니다.

이 이유는 세션 구성 요소가 AppCOntroller에로드되고 우리 사이트의 URL에 원격 서버에서 몇 초마다 충돌하는 수많은 cron 작업이 있기 때문입니다. 쿠키가 서버 userAgent에서 비활성화되었으므로 cron이 실행될 때마다 새 세션을 만들어야합니다 (쿠키가 활성화 된 일반 userAgent는 동일한 세션 파일을 사용합니다).

두 가지 해결 방법이 있습니다. 하나는 세션 구성 요소를 AppController 밖으로 이동하여 필요한 특정 컨트롤러로 이동하는 것입니다. 내가 선택한 솔루션 인 다른 하나는 실행되는 각 cron 다음에 session_destroy() PHP 명령을 사용하는 것입니다. 한 걸음 더 나아가 그것을 촬영하려면 내가 그 안에 Cotroller/CronAppController.php이있는 플러그인 크론을했습니다 :

/** 
    * class to extend if you want the session destroyed after an action has completed. 
    * Useful for limiting cake session file storage overload 
    * 
    */ 


    class CronAppController extends AppController { 

     /** 
     * set this to true in a controller action if you want the session destroyed 
     */ 
     public $cronAction = false; 

     function afterFilter(){ 
      parent::afterFilter(); 
      if($this->cronAction){ 
       session_destroy(); 
      } 
     } 
    } 

는 그런 다음 조치를 한 후, Cron.CronAppController와 그것에 크론 작용을 컨트롤러를 확장 $ this-> cronAction = true를 설정하십시오; 너는 가서 좋다!

관련 문제