私はこれまでセッションを使用してデータを保存してきましたが、セッションの使用法とその動作原理についてまとめたことがありませんでした。今日はここでそれらをまとめます。
ここでの紹介は主に PHP 言語に基づいています。他の言語の操作は異なる場合がありますが、基本原則は同じです。
session_start(); //この関数を使用してセッション関数を開きます
$_SESSION //事前定義されたグローバル変数を使用してデータを操作します
unset($_SESSION['key']) //セッションの値を破棄します
操作が簡単で、すべてがサーバーによって実装されるため、処理がバックグラウンドで行われるため、すべてが安全に見えます。しかし、セッションはどのようなメカニズムを使用し、どのように実装され、セッション状態はどのように維持されるのでしょうか?
ブラウザとサーバーは http ステートレス通信を使用し、クライアントの状態を維持するためにセッションを使用します。しかし、サーバーはどのようにしてさまざまなクライアントやユーザーを識別するのでしょうか?
ここで、人生の例を見てみましょう。パーティーに参加してたくさんの人に会った場合、さまざまな人をどのように区別しますか?顔の形、ユーザーの名前、または個人の ID カードに基づいた一意の識別子を使用できます。セッション メカニズムでは、このような一意の session_id はさまざまなユーザーを識別するためにも使用されます。違いは、ブラウザーによるすべてのリクエストがサーバーによって生成された session_id をもたらすことです。
プロセスの簡単な紹介: クライアントがサーバーにアクセスすると、サーバーは必要に応じてセッションを設定し、セッション情報をサーバーに保存し、セッションを示す session_id をクライアントのブラウザに渡し、ブラウザはこの session_id を保存しますメモリ内 (URL に書き込むなどの保存方法もあります)。これを有効期限のない Cookie と呼びます。ブラウザを閉じると、この Cookie はクリアされ、ユーザーの一時 Cookie ファイルは含まれなくなります。将来的には、ブラウザはこのパラメータ値をすべてのリクエストに追加し、サーバーはこの session_id に基づいてクライアントのデータ ステータスを取得できるようになります。
クライアントのブラウザが予期せず閉じられた場合、サーバーによって保存されたセッション データはすぐには解放されません。session_id がわかっている限り、データは引き続きリクエストを通じて取得できます。ただし、この時点ではバックグラウンド セッションはまだ存在しますが、セッションの保存には有効期限があり、指定された時間が経過してもクライアントからの要求がなくなると、セッションがクリアされます。
以下では、セッション保存メカニズムを紹介します。デフォルトのセッションはファイルに保存されます。つまり、セッションデータはファイルの形式で保存されます。 phpではセッションの保存方法は主にphp.iniの設定session.save_handlerに基づいて選択されます。
ちなみに、サーバー LVS、つまり複数のサーバーを作成したい場合、通常は memcached セッションを使用します。そうしないと、一部のリクエストがセッションを見つけることができなくなります。
単純な memcache 構成:
リーリーもちろん、ファイル ファイル キャッシュを使用する必要がある場合は、nfs を使用してファイルを保存し、保存されたすべてのセッション ファイルを 1 か所に配置できます。先ほど述べたように、ユーザーに返されるセッション ID は最終的にメモリに保存されます。ここで、ユーザーの URL に保存するパラメーターを設定することもできます。
既存のシステム A と B; システム A は独立して実行できる Web システム、つまり、システム B はモバイルに基づいており、変更せずにシステム A の機能インターフェイスを呼び出す必要があるとします。 A. この条件下、つまりログイン検証とセッション ストレージが変更されていない場合、システム B はフロントエンド ユーザーのリクエストを処理できます。
ここで提供されるソリューションは PHP を使用して実装されます。ユーザーが正常にログインすると、保存されたセッションの session-id がシステム B に返され、システム B は他のインターフェイスをリクエストするたびに session_id を含めます。このようにして、システム A は session_start の前に session_id (session_id) を追加します。システム B は A を安全に呼び出すことができます。