phpのsessionごみ回収メカニズム


PHPでは、このオブジェクトを指す変数が何もない場合、このオブジェクトはゴミになります.PHPはメモリに破棄されます.これはPHPのGCゴミ処理メカニズムで、メモリオーバーフローを防止します.
GCの仕事はすべてのSession情報をスキャンし、現在の時間からsessionが最後に修正した時間を減算し、session.gc_maxlifetimeパラメータと比較し、生存時間がgc_maxlifetime(デフォルト24分)を超えると、そのsessionを削除することです.
有効な要求が発生すると、PHPはグローバル変数session.gc_probabilitysession.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()を使用して各サイトのセッションを専用ディレクトリに保存します.
  • はGCの起動率を高め、GCの起動率が向上すると、システムの性能も相応に低下し、推奨しない.
  • 現在のセッションの生存時間をコードで判断し、session_destroy()で削除する.
  • session.gc_probability = 1
    
    session.gc_divisor = 100
    
    session.gc_maxlifetime = 1440

    この3つの構成の組み合わせは、サービス側sessionのゴミ回収メカニズムを構築します.session.gc_probabilitysession.gc_divisorはsessionクリーンアップを実行する確率を構成し、理論的にはサービス側が定期的にgc関数を呼び出してsessionをクリーンアップする確率と解釈され、クリーンアップの確率は:gc_probability/gc_divisor例えば:1/100は新しいセッションごとに初期化する時、1%の確率でゴミ回収プログラムが起動し、クリーンアップの基準はsession.gc_maxlifetimeで定義された時間です.session.gc_divisorsession.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に設定する必要があります.