私は最近、私がそこに膨大な数のセッションを持っていることに気がついた.130万セッション(ls -l /var/lib/php/session/ | wc -l
から決定)。私の毎週の訪問は一桁の数字でしかないので、これは狂気のようです。何らかの理由でセッションを保存していて古いものをフラッシュしないと仮定しています。/var/lib/php/session /内の古いセッションはどのようにフラッシュできますか?
これを制御するphp.iniに関連する設定はありますか?
私は最近、私がそこに膨大な数のセッションを持っていることに気がついた.130万セッション(ls -l /var/lib/php/session/ | wc -l
から決定)。私の毎週の訪問は一桁の数字でしかないので、これは狂気のようです。何らかの理由でセッションを保存していて古いものをフラッシュしないと仮定しています。/var/lib/php/session /内の古いセッションはどのようにフラッシュできますか?
これを制御するphp.iniに関連する設定はありますか?
はい、これについての議論はfound in the manual hereことができます:
あなたはそれらの変数があるとして、それは、ガベージコレクションが実行されていることをどのように可能性がその効果、すべてsession.gc_の設定を見てみたいです。
これは、あなたのセッションファイルが削除されていないように見えるので、明らかに間違っています。
php.iniファイルのsession.gc_maxlifetime設定を考慮する必要があります。ファイルの作成が完了してからその秒数までファイルが削除されないためです。 gc_maxlifetimeが長すぎると、ファイルが蓄積されます。
このスクリプトは、毎日または毎週インストールして実行してガベージコレクタを実行することができる、推奨されるcron指向のコマンドラインPHPスクリプトです。私はそれから始まり、何が起こるか見る。
実際にガベージコレクタがセッションを削除するのを防ぐアクセス許可の問題がある可能性があります。このプログラムを手動で実行し、セッションファイルの数に何が起こったかを確認するのが適切です。 php7.1をお持ちの場合は、マニュアルの推奨コードです。
<?php
// Note: This script should be executed by the same user of web server process.
// Need active session to initialize session data storage access.
session_start();
// Executes GC immediately
session_gc();
// Clean up session ID created by session_gc()
session_destroy();
?>
同様の方法で動作するはずPHPの古いバージョンのためのプログラムは次のようになります。
<?php
ini_set('session.gc_probability', '1');
ini_set('session.gc_divisor', '1');
session_start();
session_destroy();
?>
ここでの考え方は、あなたがガベージコレクタは、確率100を作ることによって実行されることを保証されていることですこのスクリプトの%。
このヒントをありがとう!注目すべきことに、PHP7のみで動作し、5.6で遅れていますが、php.iniを直接変更してgcの分母を1に設定しても同じ結果が得られました.GCが正常に動作しているようです。本当の原因は、私の訪問者数がそれほど多くはないにもかかわらず、私が実際に* 1週間に1.3Mのセッションを生成していたことです(私のセッションに設定された有効期限)。すべてのリクエストが私が提供するAPIを含む新しいセッションIDを生成しているようですので、それは暴走問題になっています。 – Nathan
意味があります。 PHPセッションは、設定されているCookieに依存します。どちらの場合でも、セッションIDをgetパラメータとして渡す必要があります。これは、REST APIでの使用には理想的ではありません。 – gview
ガベージコレクションは自動的に行う必要があるため、ご使用の環境のどこかに固有の問題が存在する必要があります。もう1つの選択肢は、ファイルベースのセッション記憶域から離れ、データベースセッションハンドラを調べることです。 これ以外の場合は、ガベージコレクションに影響するコアセッション構成項目へのリンクです。http://php.net/manual/en/session.configuration.php#ini.session.gc-probability – Scuzzy
実行中のディストリビューションは何ですか? Debianベースのシステムでは、これはcronジョブによって処理されます。いくつかの良い情報については、http://php.net/manual/en/session.configuration.phpのコメントを参照してください。 – Kai
この問題は、サーバーcpdeで実装したセッションの期間に起因します。あなたのコードでそれを減らしてください。 – Fabien