この記事では、PHP でセッションの有効期限を設定する方法を詳しく紹介します。必要な方は参考にしてください。
PHP でセッションの有効期限を設定する最も簡単な方法は、PHP 設定ファイルの session.gc_maxlifetime を変更することです。 概要: すべての PHP リクエストは、1/100 の確率 (デフォルト値) で「セッションのリサイクル」をトリガーします。 「セッションのリサイクル」が発生すると、/tmp/sess_* ファイルがチェックされ、最終変更時間が 1440 秒 (gc_maxlifetime の値) を超える場合、これらのファイルは削除されます。これは、これらのセッションが期限切れになったことを意味します。 1. セッションはサーバー側 (通常は PHP モジュールを備えた Apache) にどのように存在しますか? デフォルトでは、PHP はセッションを /tmp ディレクトリに保存し、ファイル名は sess_01aab840166fd1dc253e3b4a3f0b8381 のようになります。各ファイルはセッションに対応します。 詳細 /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381 ユーザー名|s:9:”jiangfeng”;管理者|s:1:”0″; #変数名 | 型: 長さ: 値 ここでセッションファイルを削除するということは、該当するセッションが無効になることを意味します。 2. セッションはクライアント側 (通常はブラウザー) にどのように存在しますか? セッションはブラウザ側にあり、セッション ID (サーバー側で生成された一意の ID) を保存するだけで済みます。保存するには、Cookie と URL の 2 つの方法があります。セッション ID が Cookie に保存されている場合は、ブラウザーの Cookie に PHPSESID 変数があることがわかります。 URL で渡された場合は、次のような内容が表示されます。 Index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381 の URL。 (サーバー側で session.use_cookies を使用して、どのメソッドが使用されるかを制御します) 3. サーバー側では、PHP はセッション ファイルの有効期限が切れているかどうかをどのように判断しますか? 「現在」までの「最終変更時刻」が gc_maxlifetime (デフォルトは 1440) 秒を超えると、セッション ファイルは次のセッションのリサイクル中に期限切れとみなされ、ファイルが変更されていない場合、セッション ファイルは削除されます (セッションは削除されます)。期限切れ)。 Web サイトにログインし、1440 秒 (デフォルト値) 以内に操作がなかった場合、対応するセッションは期限切れとみなされます。 したがって、php.ini ファイルの gc_maxlifetime 変数を変更すると、セッションの有効期限を延長できます (たとえば、有効期限を 86400 秒に変更します)。 session.gc_maxlifetime = 86400 次に、Apache サーバーを再起動します。 知らせ: PHP5 は、セッションの有効期限が切れたときにリサイクル メカニズムを使用します。 ここで設定した時間は 86400 秒です。セッションが 86400 秒以内に変更されなかった場合、セッションは次の「リサイクル」まで削除されません。 3. セッションの「リサイクル」はいつ行われますか? デフォルトでは、すべての PHP リクエストに対して 1/100 の確率でリサイクルが行われるため、単純に「100 個の PHP リクエストごとに 1 回のリサイクルが発生する」と理解できます。 この確率は次のパラメータによって制御されます。 #確率は gc_probability/gc_divisor です セッション.gc_確率 = 1 session.gc_divisor = 100 注: 1. この場合、gc_maxlifetime=120 と仮定します。セッション ファイルが最後に変更されたのが 120 秒前であれば、次のリサイクル (1/100 の確率) が発生するまでセッションはまだ有効です。 2. セッションが session.save_path を使用してセッションを別の場所に保存する場合、セッションのリサイクル メカニズムが期限切れのセッション ファイルを自動的に処理しない可能性があります。現時点では、期限切れのセッションを手動 (または crontab) で削除する必要があります。 cd /path/to/sessions; find -cmin +24 | 4、特別な状況 リサイクル メカニズムはファイルの「最終変更時刻」をチェックするため、セッションがアクティブでもセッションの内容が変更されていない場合、対応するセッション ファイルは変更されていないため、リサイクル メカニズムはこれを問題があると見なします。長時間アクティブなセッションがないため、削除されました。次のコードで解決できます。 リーリー コードは 60 秒ごとにセッションの変更を試みます。概要: セッションの有効期限を変更したい場合は、変数 gc_maxlifetime を変更するだけです。 PHP5 のセッションは、受動的なリサイクル メカニズム (ガベージ コレクション) を使用します。 期限切れのセッション ファイルは自然には消えませんが、期限切れのセッションは「リサイクル」をトリガーして処理されます。 これらをご紹介します。皆さんのお役に立てれば幸いです。 |