この記事では、PHP のセッション生成メカニズム、リサイクル メカニズム、ストレージ メカニズムに関する関連知識を詳細に紹介し、PHP セッションの動作メカニズムを深く理解することができます。必要な方は参考にしてください。
このセクションの内容: phpセッションメカニズム PHP でのセッションの使用法は、多くの PHP チュートリアルで必須です。このセクションでは、セッションの理解をより高いレベルに引き上げるために、PHP でのセッションの生成メカニズム、リサイクル メカニズム、および保存メカニズムを詳しく説明します。 以下のコンテンツは (bbs.it-home.org) によって収集および整理されています。PHP を学習するには、このサイトの PHP プログラミング コラムに注目してください。 1. phpのセッション生成メカニズム PHPでセッションを生成するには? セッションを設計する目的は、http プロトコル (ステートレス) の欠点を補うために、各ユーザーのさまざまな状態を維持することです。 セッションはサーバー上に保存されますが、各ユーザーの状態を維持するために使用されますが、ユーザーを区別するために使用されますか?この時点では、Cookie を使用する必要があります。 コード内で session_start(); が呼び出されると、PHP はセッション ストレージ ディレクトリ (デフォルトは /tmp/) とクライアントの Cookie ディレクトリにファイルを生成します。 セッションファイル名は次のようになります: この時点で、次の 2 行のコードが session_start(); に追加されるとき、形式は sess_{SESSIONID} です。 $_SESSION['名前'] = 'wanchun0222'; $_SESSION['ブログ'] = 'coderbolg.net';ファイルには次の内容が含まれています。 名前|s:11:"wanchun0222";ブログ|s:13:"coderbolg.net";もう一度クッキーを見てください: サーバーが自動的に Cookie を生成したことがわかります。Cookie の名前は「PHPSESSID」で、Cookie の内容は文字列です。実際、この文字列は {SESSIONID} です。セッションを使用する場合、PHP は最初に一意の SESSIONID 番号 (2bd170b3f86523f1b1b60b55ffde0f66 など) を生成し、次にサーバーのデフォルトのディレクトリにファイル名を sess_{SESSIONID} として生成することをすでに理解しているかもしれません。 、現在のユーザーのクライアントが Cookie を生成する、その内容はすでに述べたとおりです。このようにして、PHP はユーザーごとに SESSIONID を生成します。これは、ユーザーごとに 1 つのセッション ファイルを意味します。 PHP は、ユーザーが初めてセッションを使用するときに、クライアントに Cookie を書き込みます。ユーザーが今後アクセスするとき、ブラウザはこの Cookie を取得した後、内部の SESSIONID を読み取って保持します。この SESSIONID はセッション ディレクトリに移動し、セッション ファイルを見つけます。見つかった後は、$_SESSION['blog'] が呼び出されたときに表示されます。 2. PHP のセッション有効期限のリサイクルメカニズム セッションの生成と動作原理を理解した後、セッション ディレクトリには多数のセッション ファイルが存在することがわかりました。 もちろん、これらのファイルは永久に存在してはならず、PHP は期限切れのリサイクル メカニズムを提供する必要があります。 php.ini では、session.gc_maxlifetime によってセッションの生存時間が設定されます (デフォルトは 1440 秒)。 セッション ファイルの最終更新時間が生存時間を超えた場合、セッション ファイルは期限切れとみなされます。 次回セッションがリサイクルされるときに削除されます。次のセッションはいつリサイクルされますか?これは php リクエストの数に関係します。 PHP の内部メカニズムでは、PHP が n 回リクエストされると、リサイクル メカニズムが 1 回トリガーされます。 リクエストがトリガーされる回数は、次の 2 つのパラメーターによって制御されます。 セッション.gc_確率 = 1 session.gc_divisor = 100これは php.ini のデフォルト設定であり、100 個の PHP リクエストごとに 1 回のリサイクルが発生することを意味します。確率は gc_probability/gc_divisor です。サーバー側のセッション有効期限のメカニズムについて学習しました。次に、クライアント側の Cookie の有効期限のメカニズムを見てみましょう。 Cookie の有効期限が切れると、当然ながらブラウザはサーバーに Cookie を送信できなくなります。このとき、サーバーのセッション ファイルが存在していても、PHP はどのセッション ファイルを読み込むべきかがわからないため、役に立ちません。 PHP の Cookie の有効期限は作成時に設定されますが、セッションの作成時にクライアント用に PHP によって作成される Cookie のライフサイクルはどのようなものですか? これはphp.ini: session.cookie_lifetimeで設定されます。この値のデフォルトは 0 です。これは、ブラウザが閉じるとすぐに SESSIONID が無効になることを意味します。 session.gc_maxlifetime と session.cookie_lifetime を同じ値に設定すると、セッションの有効期限を制御できます。 3. PHPのセッションのクライアントストレージメカニズム ユーザーが Cookie をオフにすると、セッションはまったく機能しなくなります。 PHPのセッションのクライアント側ストレージメカニズムはCookieのみですか?いいえ。セッション ID は Cookie を通じて各ページに渡すことができないため、ページ取得を通じて値を渡すという別の魔法の武器があります。 php.ini の session.use_trans_sid が 1 に設定されている場合、Cookie が無効になっている場合、PHP は get メソッドを通じてセッション ID をページ間で自動的に渡すことができます。 現時点で、クライアントで Cookie が無効になっているときにセッションが使用され、現在のページをクリックして別のページにリンクすると、php は次のように sessionid パラメーターをリンクに自動的に追加します: nextpage.php?セッションID=2bd170b3f86523f1b1b60b55ffde0f66。 短所: 安全性が十分ではありません。 |