ホームページ  >  記事  >  バックエンド開発  >  セッション原理の簡単な説明_PHP チュートリアル

セッション原理の簡単な説明_PHP チュートリアル

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

Session の存在意義は、Web 開発に携わっている人であれば理解していると思いますが、HTTP がステートレス プロトコルであるために生じる問題を解決するためのものなので、詳細は説明しません。ここで話したい主な点は、サーバーとクライアントがセッションを使用してどのように対話するかということです。

セッションワークの大まかな流れ

まず以下のフローチャートを見てください:

セッション原理の簡単な説明_PHP チュートリアル

ユーザーが初めてサイトにアクセスすると、PHP は session_start() 関数を使用してユーザーのセッション ID を作成します。これは、訪問する各ユーザーに固有のセッション ID を取得します。 ID は応答ヘッダーの Cookie に保存され、クライアントに送信されます。このようにして、クライアントはサイトから与えられたセッション ID を取得します。

ユーザーがサイトに 2 回目にアクセスすると、ブラウザはローカルに保存されている Cookie (前回取得したセッション ID を含む) をリクエストとともにサーバーに送信します。リクエストを受信した後、サーバーはリクエストが存在するかどうかを検出します。セッション ID が存在する場合は、対応するセッション ファイルが検索され、存在しない場合は、最初と同様に新しいセッション ファイルが作成されます。

通常、サイトの終了関数は、実際には session_destroy() 関数を呼び出し (より複雑な場合があります)、ユーザーのセッション ファイルを削除し、ユーザーの Cookie をクリアします。この方法では、クライアントとサーバーの間に接触はありません。

写真の赤いボックスは完全な HTTP リクエストです。HTTP はステートレスであるため、リクエストが完了すると、クライアントとサーバーには関係がなくなり、誰もお互いを知りません。ただし、一部のニーズ (ログイン状態の維持など) により、サーバーとクライアントの接続を維持する必要があり、セッション ID がこの接続の媒体になります。

クライアントワーク

上記の分析により、セッションが実際に Cookie に依存していることがわかります。ユーザーが特定のサイトにアクセスすると、ブラウザーはユーザーがアクセスしたサイトに基づいて利用可能な Cookie を自動的に検索し、利用可能な Cookie がある場合は送信されます。サーバーで。サーバーからの応答を受信するたびに、ローカル Cookie 情報が更新されます。

もちろん、GET を使用してセッション ID を渡すこともできますが、GET は安全ではないためお勧めしません。

サーバーサイドの仕事

上記のフローチャートからわかるように、サーバーは実際にセッション ファイルに生成されたデータの一部を保存します。ファイルの名前は「sess」にセッション ID を加えたものです。これらのファイルの保存場所は phpinfo() です。見つかった session.savepath の値。

セッション原理の簡単な説明_PHP チュートリアル

上の図から、サーバーとクライアントが同じセッション ID 情報を保存していることが明確にわかります。これが、両者の接続を維持するための鍵です。

セッションの悪影響

セッションによってもたらされる主な問題は、数千万人のユーザーがいる Web サイトの場合、各ユーザーがセッション ファイルにアクセスするたびにパフォーマンスに影響を与えることであると想像できます。対応するセッション ファイルはシステム リソースを大量に消費します。したがって、現時点では、サブディレクトリやハッシュなど、セッションストレージ用にいくつかのカスタム設定を行う必要があります。セッションファイルに保存するだけでなく、PHP に付属のセッション機能を放棄して自分でセッションを実装し、データベースにセッション情報を保存することもできます。このように、データベースのキャッシュを設定するのが最適です。そうしないと、数千万のデータが頻繁に取得され、大量のリソースが消費されます。

セッションをクリア

クライアントとサーバー間のこの接続は時間制限がある必要があるため、セッションを定期的にクリアする必要があります。この問題は 2 つの側面で考慮する必要があります。1 つはサーバー側のセッション ファイルをクリアすること、もう 1 つはクライアントの Cookie 情報をクリアすることです。これは、どちらも情報の半分を保存するためです。

PHP GC プロセスは、セッション ストレージ ディレクトリをスキャンしてセッション ファイルをクリアできますが、このプロセスは特にリソースを消費するため、PHP はセッションの開始時に期限切れのセッションをクリーンアップする確率が 1% にデフォルト設定されているため、それが意味するわけではありません。ユーザー セッションの有効期限が切れた場合、対応するセッション ファイルはすぐに消去されますが、99% の確率で消去されません。これには、私たちプログラマーが自分で行う必要があります。セッション情報に有効期限を保存できます。その値はユーザーの最終アクセス時刻になります。ユーザーがアクセスすると、最終アクセス時刻から現在の時刻が減算され、タイムアウトになるかどうかが確認されます。タイムアウトになると、対応するセッション ファイルが削除され、Cookie の Expires 属性が負の値に設定されます。これにより、クライアント側のCookie情報も有効期限が切れるとブラウザ上で自動的に削除されます。

PHPセッションに関連する共通機能

  • session_start(): セッションを開始します。これについては何も言うことはありません。セッションIDに基づいてセッションファイルを開きます。セッションIDがない場合は、IDと対応するセッションファイルを作成します
  • $SESSION[]配列: $SESSION にデータを保存するだけでなく、セッション ファイルには ID などの他の情報も保存されます。
  • sessionunset() : $SESSION 配列をクリアしますが、変数 $SESSION はまだ存在します。これは unset($SESSION) とはまったく異なる概念です。
  • sessioncommit(): セッションデータを送信してセッションを終了し、$SESSION データをファイルに書き込んでセッションを終了します。実際、ページの実行が終了すると、PHP はこれと同じ操作を自動的に実行します。関数。なのでこの機能はほとんど使われません
  • session_destroy(): セッションからログアウトし、セッションを閉じて、対応するセッション ファイルを削除します。クライアントとサーバー間の接続を切断します。

http://www.bkjia.com/PHPjc/738551.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/738551.html技術記事 Session の存在意義は、Web 開発に携わっている人であれば理解していると思いますが、HTTP がステートレス プロトコルであるために生じる問題を解決するためのものなので、詳細については説明しません。ここで一番言いたいのはサービスです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。