phpのsessionごみ回収メカニズム
PHPでは、このオブジェクトを指す変数が何もない場合、このオブジェクトはゴミになります.PHPはメモリに破棄されます.これはPHPのGCゴミ処理メカニズムで、メモリオーバーフローを防止します.
GCの仕事はすべてのSession情報をスキャンし、現在の時間からsessionが最後に修正した時間を減算し、
有効な要求が発生すると、PHPはグローバル変数
すなわち、
では、この時どうやって解決しますか? はGCの起動率を高め、GCの起動率が向上すると、システムの性能も相応に低下し、推奨しない. 現在のセッションの生存時間をコードで判断し、
この3つの構成の組み合わせは、サービス側sessionのゴミ回収メカニズムを構築します.
例:
つまり、1千人のユーザーが
注意:一般的に、いくつかの大規模なポータルサイトでは、
次に、gc(ゴミ回収)プロセスを呼び出すには、どのように構成すればよいかを例に示します.
phpを構成する.iniファイル、以下の情報を変更します.
3つのセッションを開くと、対応する3つのセッションファイルが作成され、各ファイルが60秒以内に呼び出されないと「ゴミファイル」と見なされ、gcプロセスが呼び出されると「ゴミファイル」はunlinkされます.phpを変更したからです.Iniプロファイルは、gcが呼び出される確率を100%に変更するので、次に、ブラウザを再使用して次のページをリフレッシュすると、3つのセッションファイルが1つしか残っていないはずです.
デフォルトはfileで、sessionのサービス側での保存方法を定義します.fileはsesionを一時ファイルに保存することを意味します.データベースなどの別の方法で保存したい場合は、この項目をuserに設定する必要があります.
GCの仕事はすべてのSession情報をスキャンし、現在の時間からsessionが最後に修正した時間を減算し、
session.gc_maxlifetime
パラメータと比較し、生存時間がgc_maxlifetime
(デフォルト24分)を超えると、そのsessionを削除することです.有効な要求が発生すると、PHPはグローバル変数
session.gc_probability
とsession.gc_divisor
の値に基づいてGCを有効にするかどうかを決定し、デフォルトでは、session.gc_probability = 1
session.gc_divisor = 100
すなわち、
1%
がGCを起動する可能性がある(すなわち、100個の要求のうち1個のみが100個の要求に伴って起動する).ただし、Webサーバに複数のサイト、複数のサイトがある場合、GCがセッションを処理すると予想外の結果になる可能性があります.なぜなら、GCは作業中に異なるサイトのセッションを区別しないからです.では、この時どうやって解決しますか?
session.save_path
を変更するか、session_save_path()
を使用して各サイトのセッションを専用ディレクトリに保存します.session_destroy()
で削除する.session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
この3つの構成の組み合わせは、サービス側sessionのゴミ回収メカニズムを構築します.
session.gc_probability
とsession.gc_divisor
はsessionクリーンアップを実行する確率を構成し、理論的にはサービス側が定期的にgc関数を呼び出してsessionをクリーンアップする確率と解釈され、クリーンアップの確率は:gc_probability/gc_divisor
例えば:1/100
は新しいセッションごとに初期化する時、1%
の確率でゴミ回収プログラムが起動し、クリーンアップの基準はsession.gc_maxlifetime
で定義された時間です.session.gc_divisor
とsession.gc_probability
は、セッションの初期化時にgc
(garbage collectionゴミ回収)プロセスを開始する確率を定義する.この確率はgc_probability/gc_divisor
で計算されます.例えば1/100は、各リクエストにおいて1%の確率でgcプロセスを開始することを意味する.session.gc_divisor
のデフォルトは100です.例:
session.gc_maxlifetime = 60
session.gc_divisor = 1000
session.gc_probability = 1
つまり、1千人のユーザーが
session_start()
を呼び出すたびに、100%がゴミ回収メカニズムを実行し、ディスク上の不要なセッションファイルを削除します.注意:一般的に、いくつかの大規模なポータルサイトでは、
session.gc_divisor
を少し大きくし、コストを削減することをお勧めします.次に、gc(ゴミ回収)プロセスを呼び出すには、どのように構成すればよいかを例に示します.
phpを構成する.iniファイル、以下の情報を変更します.
session.gc_maxlifetime = 60
//sessionファイルが60 s後にアクセスされていない場合、このsessionファイルは「ゴミファイル」と見なされ、gc(ゴミ回収)プロセスの呼び出しを待っている間にsession.gc_probability = 1000
がクリーンアップされます.gcプロセスが呼び出される確率はgc_probability/gc_divisor
によって計算されるため、ここではsession.gc_probability
を1000に変更します.session.gc_divisor
のデフォルトでも1000です.gcプロセスはセッションを実行するたびにstart()関数の場合は呼び出されます.3つのセッションを開くと、対応する3つのセッションファイルが作成され、各ファイルが60秒以内に呼び出されないと「ゴミファイル」と見なされ、gcプロセスが呼び出されると「ゴミファイル」はunlinkされます.phpを変更したからです.Iniプロファイルは、gcが呼び出される確率を100%に変更するので、次に、ブラウザを再使用して次のページをリフレッシュすると、3つのセッションファイルが1つしか残っていないはずです.
session.save_handler = files
デフォルトはfileで、sessionのサービス側での保存方法を定義します.fileはsesionを一時ファイルに保存することを意味します.データベースなどの別の方法で保存したい場合は、この項目をuserに設定する必要があります.