ホームページ >バックエンド開発 >PHPの問題 >PHPで有効期限を設定する方法

PHPで有効期限を設定する方法

藏色散人
藏色散人オリジナル
2020-11-04 11:38:553756ブラウズ

php メソッドで有効期限を設定します: 最初にセッションを設定してセッションを読み取り、次に「unset($_SESSION[$name]);」によってセッションをクリアし、最後に「session::get('test」を出力します) ') ;" 期限切れです。

PHPで有効期限を設定する方法

推奨: 「PHP ビデオ チュートリアル

PHP でセッションの有効期限を厳密に設定してください。

セッションの有効期限は 30 分後に厳しく制限してください。

1. クライアント Cookie の有効期間を 30 分に設定します;

2. セッションの最大有効期間を 30 分に設定します;

3. 各セッション値についてタイムスタンプを付加し、プログラムが呼び出されたタイミングで判断する;

その理由については、まず PHP におけるセッションの基本原理を理解しましょう:

PHP のデフォルトのセッション有効期間は次のとおりです。 1440 秒 (24 分)、つまり、クライアントが 24 分を超えて更新されない場合、現在のセッションは無効になります。もちろん、ユーザーがブラウザを閉じるとセッションは終了し、当然セッションは存在しなくなります。

ご存知のとおり、セッションはサーバー側に保存されます。クライアントから提供されたセッション ID に基づいてユーザーのファイルが取得され、そのファイルが読み取られて変数の値が取得されます。クライアントの Cookie または Http1.1 プロトコルを使用できます。

Query_String (アクセスされた URL の "?" 以降の部分) がサーバーに送信され、サーバーはセッションのディレクトリを読み取ります。 .

セッションのライフサイクルを制御するには、まずセッションに関する php.ini の関連設定について学ぶ必要があります (「[セッション]」セクションで php.ini ファイルを開きます)。

##1. session.use_cookies: デフォルト値は「1」です。これは、SessionID が Cookie を使用することを意味します。渡すには、Query_String を使用して渡します。

2. session.name: これは変数です。 SessionID に保存される名前 (Cookie または Query_String の場合があります。デフォルト値は "PHPSESSID";

3. session.cookie_lifetime: これは、SessionID がクライアント Cookie に保存される時間を表します。デフォルトは 0、これは、ブラウザが閉じるとすぐにセッション ID が無効になることを意味します。このため、セッションは永続的に使用できなくなります。

4. session.gc_maxlifetime: セッション データがサーバー側に保存される時間です。この時間を超えると、セッション データは自動的に削除されます。

他にも多くの設定がありますが、この記事に関連するものはこれらだけであり、セッションの生存期間を設定する方法から始めましょう。

前に述べたように、サーバーはセッション ID を通じてセッション データを読み取りますが、通常、ブラウザから送信されたセッション ID はブラウザを閉じると消えてしまうため、手動でセッション ID を設定して保存するだけで済みますね。はい...

サーバーの操作権限がある場合、これを設定するのは非常に簡単です。次の手順を実行するだけです:

1. 「」を設定します。 session.use_cookies" を 1 に設定します。Cookie を使用してセッション ID を保存しますが、デフォルトは 1 で、通常は変更する必要はありません。

2. "session.cookie_lifetime" を設定する必要がある時間に変更します (たとえば、 1 時間、秒単位で 3600 に設定できます);

3.「session.gc_maxlifetime」を「session.cookie_lifetime」と同じ時間に設定します;

明確に記載されていますPHP ドキュメントでは、セッションの有効期間を設定するパラメータは session.gc_maxlifetime であると記載されています。このパラメータは、php.ini ファイルまたは ini_set() 関数を通じて変更できます。問題は、多くのテストを行った後、この

パラメーターを変更しても基本的には効果がなく、セッションの有効期間がデフォルト値の 24 分のままであることです。

PHP の動作メカニズムにより、セッション情報を定期的にスキャンしてセッション情報が無効かどうかを判断するデーモン スレッドがありません。有効なリクエストが発生すると、PHP は GC (ガベージ コレクター) を開始するかどうかを決定します。

デフォルトでは、session.gc_probability = 1、session.gc_divisor = 100 です。これは、GC が開始される確率が 1% であることを意味します。 GC のジョブは、すべてのセッション情報をスキャンし、現在時刻からセッションの最終変更日を減算し、それを session.gc_maxlifetime パラメーターと比較することです。生存時間が gc_maxlifetime を超えた場合、セッションは削除されます。

これまでのところ、すべてが正常に動作しています。では、なぜ gc_maxlifetime が無効になるのでしょうか?

デフォルトでは、セッション情報はシステムの一時ファイル ディレクトリにテキスト ファイルの形式で保存されます。 Linux では、このパスは通常 \\tmp であり、Windows では通常 C:\\Windows\\Temp です。サーバー上に複数の PHP アプリケーションがある場合、それらのセッション ファイルは同じディレクトリに保存されます。同様に、これらの PHP アプリケーションも一定の確率で GC を開始し、すべてのセッション ファイルをスキャンします。

問題は、GC が動作しているときに、異なるサイト上のセッションが区別されないことです。たとえば、サイト A の gc_maxlifetime は 2 時間に設定され、サイト B の gc_maxlifetime はデフォルトの 24 分に設定されます。サイト B の GC が開始されると、

がスキャンされます。

パブリック一時ファイル ディレクトリをスキャンし、サイト A からのものかサイト B からのものかに関係なく、24 分より古いすべてのセッション ファイルを削除します。このように、サイト A の gc_maxlifetime 設定は役に立ちません。

問題を見つけたら、解決するのは簡単です。 session.save_path パラメータを変更するか、session_save_path() 関数を使用して、セッションが保存されるディレクトリを専用のディレクトリに指定します。gc_maxlifetime パラメータは正常に機能します。

もう 1 つの問題は、gc_maxlifetime が保証できるのはセッションの存続期間の最短時間だけであり、保存することができず、この時間を過ぎるとセッション情報はすぐに削除されてしまいます。 GC は確率に基づいて開始されるため、長期間開始されない可能性があり、gc_maxlifetime を超えた後も多数のセッションが有効になります。

この問題を解決する 1 つの方法は、session.gc_probability/session.gc_divisor の確率を高めることです。100% にすると、この問題は完全に解決されますが、パフォーマンスに深刻な影響を与えることは明らかです。もう 1 つの方法は、

PHP のみを使用して実装し、セッション クラスを作成し、セッションの書き込み時に有効期限を書き込むことです。読み取りの際は、有効期限に基づいて有効期限が切れているかどうかを判断します。

えええええ

以上がPHPで有効期限を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。