ホームページ  >  記事  >  バックエンド開発  >  PHP のセッションを理解し、セッションの有効期間、セッションの有効期間を制御する_PHP チュートリアル

PHP のセッションを理解し、セッションの有効期間、セッションの有効期間を制御する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:01:141238ブラウズ

PHP のセッションとセッション有効期間の制御について理解します

0。
セッションの中国語訳は「会話」といい、本来の意味は、始まりと終わりのある一連の行為・メッセージ、例えば電話をかけるとき、受話器を取るまでの一連の過程を指します。ダイヤルして電話を切ることをセッションと呼ぶことができます。現在の社会におけるセッションの理解は非常に混乱しています。「ブラウザ セッション中、...」という言葉が時々見られますが、ここでセッションとは、ブラウザ ウィンドウが開いてから閉じるまでの期間を指す場合もあります。 「セッション中のユーザー(クライアント)」という文では、ユーザーの一連の行動(通常はログインから商品の購入、チェックアウトまでなど、特定の目的に関連した一連の行動)を指す場合があります。ただし、このようなオンライン ショッピング プロセスは、単につながりを指している場合もあります。その違いは文脈からのみ推測できます
。 ただし、セッションという言葉がネットワーク プロトコルに関連付けられている場合、多くの場合、「接続指向」および/または「状態維持」という 2 つの意味が含まれます。「接続指向」とは、通信する当事者が通信する前にまず接続を確立する必要があることを意味します。電話をかけるなどの通信チャネルでは、相手が電話に出るまで通信を開始できません。 「ステータスの維持」とは、通信相手が一連のメッセージを相互に依存できるように関連付けることができることを意味します。たとえば、ウェイターは、再び来た古い顧客を認識し、その顧客が前回店に 1 ドルを借りていたことを思い出すことができます。 。このカテゴリの例は、「TCP セッション」または「POP3 セッション」です。
この混乱は元に戻せないため、セッションを定義するための統一基準を設けるのは困難です。セッション関連の情報を読むときは、文脈に頼って理解を推測するしかありません。しかし、次のように理解することができます。たとえば、電話をかけるとき、電話をかけた瞬間から電話を切る瞬間まで、電話は接続されたままであるため、この接続状態はセッションと呼ばれます。これは、訪問者と Web サイト全体との間の対話中に常に存在するパブリック変数であり、クライアントが COOKIE をサポートしていない場合、データが正しく安全であることを保証するために、SESSION 変数が使用されます。 Web サイトの訪問者には、一意の識別子、いわゆるセッション ID が割り当てられます。これは、クライアント側の Cookie に保存されるか、URL 経由で渡されます。
SESSION の発明により、HTTP プロトコルの限界が解消されました。HTTP プロトコルはステートレス プロトコルとみなされ、サーバー側で応答が完了すると、サーバーはブラウザとの接続を失います。これは、HTTP プロトコルの本来の目的と一致しています。クライアントは、サーバーに特定のファイルをダウンロードするよう要求するだけで済みます。クライアントとサーバーは、それぞれのリクエストの過去の動作を記録する必要はありません。顧客と自動販売機、または通常の(非会員制)ハイパーマーケット。
したがって、ユーザーの関連情報は SESSION (Cookie も別の解決策) を通じて記録され、ユーザーが Web サーバーに再度リクエストを行うときにこの ID として確認できるようになります。セッションの発明により、ユーザーは複数のページを切り替えるときに自分の情報を保存できるようになります。ウェブサイトのプログラマーなら誰しも経験があると思いますが、各ページの変数は次のページでは使用できません(フォームやURLも実装できますが、非常に不十分な方法です)。一方、SESSIONに登録された変数はグローバルとして使用できます。変数。
それで、SESSIONは何に役立つのでしょうか?オンラインで買い物をするとき、誰もがショッピング カートを使用したことがあります。いつでも選択した商品をショッピング カートに追加し、最後にレジに行って会計を行うことができます。プロセス全体を通じて、ショッピング カートは選択した商品を一時的に保存する役割を果たします。これは、ユーザーの ID 認証やプログラムのステータスを追跡するために使用されます。記録、ページ間のパラメータの受け渡しなど。
SESSION の実装では COOKIE テクノロジーが使用されます。SESSION は、session_id (SESSION 番号) を含む COOKIE をクライアント側に保存します。session_name などの他のセッション変数はサーバー側に保存されます。ユーザーがサーバーにリクエストを送信すると、session_id もサーバーに送信され、session_id を通じてサーバー側に保存されている変数を抽出することで、ユーザーが誰であるかを識別できます。同時に、SESSION が時々失敗する理由を理解するのは難しくありません。
クライアントが COOKIE を無効にしている場合 (IE の「ツール」-「internet="」>「インターネット オプション」をクリックし、ポップアップ ダイアログ ボックスの「セキュリティ」-「レベルのカスタマイズ」をクリックし、「各会話を許可」の COOKIE を変更します) " が無効に設定されている場合)、session_id は渡されず、現時点では SESSION は無効になります。ただし、php5 は Linux/Unix プラットフォーム上の Cookie ステータスを自動的にチェックできます。クライアントが無効になっている場合、システムは自動的に session_id を URL に追加して渡します。 Windows ホストにはこの機能はありません。

1.phpセッション有効期間

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

php.ini の session.gc_maxlifetime を変更してセッションのライフサイクルを設定できますが、この時間を超えた直後にセッション情報が削除されるという保証はありません。 GC は確率で起動されるため、長時間起動しない場合があります。この場合、session.gc_maxlifetime を超えた後も、多数のセッションが引き続き有効になります。


2.session.gc_maxlifetime、session.gc_probability、session.gc_divisor の説明

session.gc_maxlifetime = 30 は、セッション ファイルが 30 秒経過してもアクセスされない場合、そのセッションは期限切れとみなされ、GC リサイクルを待機することを意味します。

GC プロセス呼び出しの確率は session.gc_probability/session.gc_divisor を通じて計算され、session.gc_divisor のデフォルトは 1000 です。 session.gc_probability = 1000 の場合、リサイクルを実行するために session_start() が実行されるたびに GC プロセスが呼び出されます。

session.gc_probability/session.gc_divisor の確率を増やすと役に立ちますが、パフォーマンスに重大な影響を及ぼします。


3. セッションの有効期限を厳密に制御する

(1). memcache/redis を使用してセッションを保存し、有効期限を設定します。memcache/redis のリサイクル メカニズムは確率に基づいていないため、有効期限が切れるとセッションは確実に無効になります。

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

リーリー

デモ:

リーリー

興味がありそうな記事:

    PHPセッション設定の詳細解説(有効期限、無効化、有効期間)
  • PHPセッションとCookie無効解決策を考える
  • php PHP検証セッション無効解決策
  • PHPセッション有効期限セッション。 gc_maxlifetime
  • PHP セッションの有効性の問題

http://www.bkjia.com/PHPjc/1089947.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1089947.html技術記事 PHP のセッションを理解してセッションの有効期間を制御します。 セッションの有効期間は 0 です。 セッションとは何ですか?セッションの中国語訳は「会話」で、本来の意味は始まりと終わりのある一連のことを指します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。