3

私はシステム (CakePHP 2.1) を約 2 週間稼働させ、ぶらぶらしていた何千ものセッション ファイルを削除しなければなりませんでした。それらを削除した後、再びロールインし始めました。数時間実行したところ、最大 426 ファイルになりました。システムに 10 人のユーザーがいる場合、これは正常ですか? エンジンに怒らせるように指示するrobot.txtファイルがあり、すべてのページで https に auth と acl を設定しています。誰かが私のためにこれに光を当てることができますか?

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

1 に答える 1

1

これは私にとっても問題でした。1 秒間に数千のセッション ファイルを取得していました。

この理由は、Session コンポーネントが AppCOntroller にロードされており、数秒ごとにリモート サーバーからサイトの URL にヒットする多数の cron ジョブがあるためです。サーバー userAgent では Cookie が無効になっているため、cron が実行されるたびに新しいセッションを作成する必要がありました (Cookie が有効になっている通常の userAgent は同じセッション ファイルを使用します)。

これには 2 つの回避策があります。1 つは、Session コンポーネントを AppController から必要な特定のコントローラーに移動することです。もう 1 つは、私が選択した解決策ですが、実行される各 cron の後に、php コマンド session_destroy() を使用することです。さらに一歩進めるために、Cotroller/CronAppController.php を含むプラグイン Cron を作成しました。

    /**
    * 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 アクションを含むコントローラーを Cron.CronAppController で拡張し、アクションで $this->cronAction = true; を設定します。そして、あなたは行く準備ができています!

于 2013-12-03T17:52:30.567 に答える