ホームページ  >  記事  >  バックエンド開発  >  phpセッションの仕組み(生成の仕組み、リサイクルの仕組み、保存の仕組み)の詳細説明

phpセッションの仕組み(生成の仕組み、リサイクルの仕組み、保存の仕組み)の詳細説明

WBOY
WBOYオリジナル
2016-07-25 08:52:471287ブラウズ
この記事では、PHP のセッション生成メカニズム、リサイクル メカニズム、ストレージ メカニズムに関する関連知識を詳細に紹介し、PHP セッションの動作メカニズムを深く理解することができます。必要な方は参考にしてください。

このセクションの内容: phpセッションメカニズム

PHP でのセッションの使用法は、多くの PHP チュートリアルで必須です。このセクションでは、セッションの理解をより高いレベルに引き上げるために、PHP でのセッションの生成メカニズム、リサイクル メカニズム、および保存メカニズムを詳しく説明します。

以下のコンテンツは (bbs.it-home.org) によって収集および整理されています。PHP を学習するには、このサイトの PHP プログラミング コラムに注目してください。

1. phpのセッション生成メカニズム

PHPでセッションを生成するには?

セッションを設計する目的は、http プロトコル (ステートレス) の欠点を補うために、各ユーザーのさまざまな状態を維持することです。 セッションはサーバー上に保存されますが、各ユーザーの状態を維持するために使用されますが、ユーザーを区別するために使用されますか?この時点では、Cookie を使用する必要があります。 コード内で session_start(); が呼び出されると、PHP はセッション ストレージ ディレクトリ (デフォルトは /tmp/) とクライアントの Cookie ディレクトリにファイルを生成します。

セッションファイル名は次のようになります: php session机制

この時点で、次の 2 行のコードが session_start(); に追加されるとき、形式は sess_{SESSIONID} です。

$_SESSION['名前'] = 'wanchun0222'; $_SESSION['ブログ'] = 'coderbolg.net';

ファイルには次の内容が含まれています。

名前|s:11:"wanchun0222";ブログ|s:13:"coderbolg.net";

もう一度クッキーを見てください: php session机制

サーバーが自動的に 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。

短所: 安全性が十分ではありません。



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