ホームページ  >  記事  >  バックエンド開発  >  PHPのセッションファイルが多すぎる問題について

PHPのセッションファイルが多すぎる問題について

WBOY
WBOYオリジナル
2016-06-13 12:28:57950ブラウズ

PHP のセッション ファイルが多すぎる問題について

PHP のデフォルトのメカニズム: すべての PHP リクエストに対して、1/100 の確率 (デフォルト値) で「セッションのリサイクル」がトリガーされます。 「セッションのリサイクル」が発生した場合、/tmp/sess_* ファイルがチェックされ、最終変更時間が 1440 秒 (gc_maxlifetime の値) を超えた場合、ファイルは削除されます。これは、これらのセッションが期限切れになったことを意味します。 >1. セッション ファイルとは何ですか?

ファイルは通常、/tmp/sessions/sess_4b1e384ad74619bd212e236e52a5a174If

2. セッションのリサイクルはいつ行われますか?
username|s:9:"test";admin|s:1:"0";
デフォルトでは、すべての PHP リクエストに対して 1/100 の確率でリサイクルが行われるため、単純に「100 個の PHP リクエストごとに 1 回のリサイクルが発生する」と理解できます。この確率は次のパラメータによって制御されます

#概率是gc_probability/gc_divisorsession.gc_probability = 1session.gc_divisor = 100
この場合、セッション ファイルが最後に存在した場合、gc_maxlifetime=120 であると仮定します。変更された時刻は 120 秒前であり、セッションは次のリサイクル (1/100 の確率) が発生するまで有効です。
  • セッションが session.save_path を使用してセッションを別の場所に保存する場合、セッションリサイクルメカニズムは期限切れのセッションファイルを自動的に処理しない可能性があります。このとき、期限切れのセッションを定期的に手動 (または crontab) で削除する必要があります
  • 3. セッション保存ディレクトリを設定します
php5-fpm を使用する場合は、 を変更するか、次の行を追加します:

/etc/php5/fpm/php.ini

4. セッションクリアスクリプト
session.save_path = 3;600:/tmp/sessions

ここでの時間は session.gc_maxlifetime を通じて取得できます。
スケジュールされたタスク (crontab) に入れるだけです。
#!/bin/shfind /tmp/php-session -cmin +24 -name "sess_*" -and -size 0 -delete > /dev/null 2>&1find /tmp/php-session -cmin +1440 -name "sess_*" -delete > /dev/null 2>&1

その他のメソッド

を使用します。 memcache など (session .save_handler = memcache)

  • Cookie を使用しますが、Cookie は暗号化する必要があります

  • 5. tmfs を使用して保存します。 session

  • 1. /tmp を tmpfs ファイル システムとしてマウントします

/etc/fstab を変更し、次の内容を最後の行に追加します: /tmp/sessions tmpfs defaults,size=5120m 0 0

2. セッション保存フォルダーの作成
mount -a 
php はこれらのフォルダーを自動的に作成しませんが、フォルダーを作成するためのスクリプトがソース ファイルで提供されています。以下のスクリプトも使いやすいです。 スクリプトの内容は次のとおりです。

/tmp/sessions はメモリに使用されるため、サーバーの再起動後にすべてのその中のファイルは失われるため、上記のスクリプトは /etc/rc.local に追加され、php を開始する前に配置する必要があります
#!/bin/shdir="0 1 2 3 4 5 6 7 8 9 a b c d e f"for levela in $dir;do    for levelb in $dir;    do        for levelc in $dir;        do            mkdir -p /tmp/sessions/$levela/$levelb/$levelc;        done    done;donechown -R root:webgrp /tmp/sessions && chmod -R 1777 /tmp/sessions
3. セッションを別のディレクトリに保存します

php 自体はセッション列のマルチレベル分散をサポートしており、php.ini で session.save_path = /tmp を

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。