ホームページ >バックエンド開発 >PHPチュートリアル >PHPのセッションファイルが多すぎる問題について
PHP のセッション ファイルが多すぎる問題について
PHP のデフォルトのメカニズム: すべての PHP リクエストに対して、1/100 の確率 (デフォルト値) で「セッションのリサイクル」がトリガーされます。 「セッションのリサイクル」が発生した場合、/tmp/sess_* ファイルがチェックされ、最終変更時間が 1440 秒 (gc_maxlifetime の値) を超えた場合、ファイルは削除されます。これは、これらのセッションが期限切れになったことを意味します。 >1. セッション ファイルとは何ですか?
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 の確率) が発生するまで有効です。
/etc/php5/fpm/php.ini
session.save_path = 3;600:/tmp/sessionsここでの時間は session.gc_maxlifetime を通じて取得できます。
#!/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
その他のメソッド
Cookie を使用しますが、Cookie は暗号化する必要があります
5. tmfs を使用して保存します。 session
mount -aphp はこれらのフォルダーを自動的に作成しませんが、フォルダーを作成するためのスクリプトがソース ファイルで提供されています。以下のスクリプトも使いやすいです。 スクリプトの内容は次のとおりです。 /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/sessions3. セッションを別のディレクトリに保存します
php 自体はセッション列のマルチレベル分散をサポートしており、php.ini で session.save_path = /tmp を
session.save_path = "3;/tmp/sessions上記のスクリプトを使用します