ホームページ >バックエンド開発 >PHPチュートリアル >PHP セッションの有効期限とリサイクルの仕組み_PHP チュートリアル

PHP セッションの有効期限とリサイクルの仕組み_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:33:14755ブラウズ

PHP でセッションの有効期限を変更するには、PHP 設定ファイル php.ini の session.gc_maxlifetime を変更できます。

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

セッションはサーバー側 (通常は PHP モジュールを備えた Apache) にどのように存在しますか?

デフォルトでは、php はセッションを /tmp ディレクトリに保存し、ファイル名は次のようになります:

sess_01aab840166fd1dc253e3b4a3f0b8381。各ファイルはセッションに対応します。

もっと見る /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381

ユーザー名|s:9:”phpzixue.cn”;管理者|s:1:”0″;

#変数名|型: 長さ: 値

ここでセッションファイルを削除すると、対応するセッションが無効になることを意味します。

セッションはクライアント側 (通常はブラウザー) にどのように存在しますか?

セッションはブラウザ側にあり、セッションID(サーバー側で生成された一意のID)を保存するだけで済みます。保存するには、Cookie と URL の 2 つの方法があります。セッション ID が Cookie に保存されている場合は、ブラウザーの Cookie に PHPSESID 変数があることがわかります。 URL で渡された場合、次のフォームが表示されます:

index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381 URL。 (サーバー側で session.use_cookies を使用して、どのメソッドが使用されるかを制御します)

サーバー側では、PHP はセッション ファイルの有効期限が切れているかどうかをどのように判断するのでしょうか?

「現在」までの「最終変更時刻」が gc_maxlifetime (デフォルトは 1440) 秒を超える場合、セッション ファイルは期限切れとみなされ、ファイルが変更されていない場合、次のセッションのリサイクル中にセッション ファイルが削除されます。セッションは期限切れになります)。

簡単に言えば、Web サイトにログインし、1440 秒 (デフォルト値) 以内に操作がなかった場合、対応するセッションは期限切れになったと見なされます。

そのため、php.ini ファイルの gc_maxlifetime 変数を変更すると、セッションの有効期限を延長できます: (たとえば、有効期限を 86400 秒に変更します)

session.gc_maxlifetime = 86400

その後、Web サービス (通常は Apache) を再起動します。

注: PHP5 は、セッションの有効期限が切れたときにリサイクル メカニズムを使用します。ここで設定した時間は 86400 秒です。セッションが 86400 秒以内に変更されなかった場合、セッションは次の「リサイクル」まで削除されません。

セッションの「リサイクル」はいつ行われますか?

デフォルトでは、すべての PHP リクエストに対して 1/100 の確率でリサイクルが行われるため、単純に「100 個の PHP リクエストごとに 1 回のリサイクルが発生する」と理解できます。この確率は次のパラメータによって制御されます

#確率は gc_probability/gc_divisor です

session.gc_probability = 1

session.gc_divisor = 100

注 1: この場合、gc_maxlifetime=120 と仮定します。セッション ファイルが最後に変更されたのが 120 秒前であれば、セッションは次のリサイクル (1/100 の確率) が発生するまで有効です。

注 2: セッションが session.save_path を使用してセッションを別の場所に保存する場合、セッションリサイクルメカニズムは期限切れのセッションファイルを自動的に処理しない可能性があります。現時点では、期限切れのセッションを定期的に手動 (または crontab) で削除する必要があります: cd

/path/to/sessions; -cmin +24 を見つけます

特別な状況

リサイクルメカニズムはファイルの「最終変更時刻」をチェックするため、セッションがアクティブでもセッションの内容が変更されていない場合、対応するセッションファイルは変更されておらず、リサイクルメカニズムはこれを次のようにみなします。アクティブなセッションがないため、削除されます。これは私たちが見たくないものですが、次の簡単なコードを追加することでこの問題を解決できます。 リーリー

コードは 60 秒ごとにセッションの変更を試みます。

概要: セッションの有効期限を変更したい場合は、変数 gc_maxlifetime を変更するだけです。 PHP5 のセッションは、受動的なリサイクル メカニズム (ガベージ コレクション) を使用します。期限切れのセッション ファイルは自然には消えませんが、期限切れのセッションは「リサイクル」をトリガーして処理されます。

http://www.bkjia.com/PHPjc/752512.html

tru​​ehttp://www.bkjia.com/PHPjc/752512.html技術記事 PHP でセッションの有効期限を変更するには、PHP 構成ファイル php.ini の session.gc_maxlifetime を変更します。 php がリクエストを行うたびに、1/100 の確率 (デフォルト値) でトリガーされます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。