ホームページ >バックエンド開発 >PHPチュートリアル >PHPのセッションファイルが多すぎる問題とセッションファイルの保存場所については、_PHPチュートリアル
PHP のデフォルトのメカニズム: すべての PHP リクエストに対して、1/100 の確率 (デフォルト値) で「セッションのリサイクル」がトリガーされます。 「セッションのリサイクル」が発生した場合、/tmp/sess_* ファイルがチェックされ、最終変更時間が 1440 秒 (gc_maxlifetime の値) を超えた場合、これらのセッションは期限切れになったことを意味します。
1.セッションファイルとは
ファイルは通常 /tmp/sessions/sess_4b1e384ad74619bd212e236e52a5a174If です
2. セッションのリサイクルはいつ行われますか
デフォルトでは、すべての PHP リクエストに対して 1/100 の確率でリサイクルが行われるため、単純に「100 個の PHP リクエストごとに 1 回のリサイクルが発生する」と理解できます。この確率は次のパラメータによって制御されますリーリー
この場合、gc_maxlifetime=120 と仮定します。セッション ファイルが最後に変更されたのが 120 秒前であれば、セッションは次のリサイクル (1/100 の確率) が発生するまで有効です。セッションが session.save_path を使用してセッションを別の場所に保存する場合、セッションリサイクルメカニズムは期限切れのセッションファイルを自動的に処理しない可能性があります。現時点では、期限切れのセッションを定期的に手動 (または crontab) で削除する必要があります
3. セッション保存ディレクトリを設定します
php5-fpm を使用している場合は、/etc/php5/fpm/php.ini を変更し、次の行を変更または追加します。リーリー
4. セッションクリアスクリプト リーリー
ここで session.gc_maxlifetime を通じて時間を取得し、スケジュールされたタスク (crontab) に入れることができますその他の方法
memcacheなどを利用する(session.save_handler = memcache)
Cookieを使用しますが、Cookieは暗号化する必要があります
5. tmfs を使用してセッションを保存します
1. /tmp を tmpfs ファイルシステムとしてマウントします
/etc/fstab を変更し、次の内容を最後の行に追加します: /tmp/sessions tmpfs defaults,size=5120m 0 0
リーリー
2. セッション保存フォルダーを作成します
リーリー
/tmp/sessions はメモリに使用されるため、サーバーの再起動後にその中のファイルはすべて失われます。そのため、php を起動する前に、上記のスクリプトを /etc/rc.local に追加して配置する必要があります。 3. セッションを別のディレクトリに保存しますphp 自体は、セッションのマルチレベルのハッシュをサポートしています。php.ini で、;session.save_path = /tmp を
に変更します。 リーリー 4. セッションのリサイクル上記のスクリプトを使用するだけです
もちろんサーバー側ですが、メモリに保存するのではなく、ファイルまたはデータベースに保存されます。
デフォルトでは、php.iniに設定されているSESSION保存方法はfiles(session.save_handler = files)、つまりファイルの読み書きによってSESSIONデータが保存され、SESSIONファイルが保存されるディレクトリはsession.save_pathで指定されます。 、ファイル名は sess_ で始まり、接頭辞であり、その後に SESSION ID が続きます (例: sess_c72665af28a8b14c0fe11afe3b59b51b)。ファイル内のデータはシリアル化後の SESSION データです。
トラフィックが多い場合、より多くの SESSION ファイルが生成される可能性があります。この場合、SESSION ファイルを保存するための階層ディレクトリを設定すると、効率が大幅に向上します。 save_path"、N は階層レベルです。シリーズ、save_path は開始ディレクトリです。
SESSION データを書き込むとき、PHP はクライアントの SESSION_ID を取得し、この SESSION ID を使用して、指定された SESSION ファイル格納ディレクトリに対応する SESSION ファイルを検索し、存在しない場合は作成し、最後にデータをシリアル化して書き込みます。 。 書類。 SESSION データの読み取りも同様の操作プロセスで、読み取りデータを逆シリアル化する必要があり、対応する SESSION 変数が生成されます。