セッションの動作原理とセッションの使用法
まずセッションインスタンスを見てみましょう
セッション原則をもう一度見てください
これまでセッションを使用してデータを保存してきましたが、セッションの使用法とその動作原理についてまとめたことがなかったので、今日はここでまとめます。
ここでの紹介は主に PHP 言語に基づいています。他の言語では操作が異なる場合がありますが、基本原則は同じです。
1. phpでセッションを操作する方法:
session_start(); //この関数を使用してセッション関数を開きます
$_session //事前定義されたグローバル変数を使用してデータを操作します
Use unset($_session['key']) //セッションの値を破棄します
操作は簡単で、処理はバックグラウンドで行われるため、すべてが安全に見えます。しかし、セッションはどのようなメカニズムを使用し、どのように実装され、セッション状態はどのように維持されるのでしょうか?
2.セッションの実装と動作原理
ブラウザとサーバーは http ステートレス通信を使用し、クライアントの状態を維持するためにセッションを使用します。しかし、サーバーはどのようにしてさまざまなクライアントやユーザーを識別するのでしょうか?
ここで、人生の例を見てみましょう。パーティーに参加してたくさんの人に会った場合、さまざまな人をどのように区別しますか?顔の形やユーザーの名前に基づいて決定することもできます
または、一意の ID を使用する個人の 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 構成:
session.save_handler = memcache
session.save_path = "tcp://10.28.41.84:10001"
もちろん、ファイルのキャッシュを使用する必要がある場合は、nfs を使用してすべてのセッション ファイルを 1 か所に保存できます。
先ほど述べたように、ユーザーに返されるセッション ID は最終的にメモリに保存されます。ここで、ユーザーの URL に保存するパラメーターを設定することもできます。
3. 質問の例
既存のシステム a と b; システム a は独立して実行できる Web システム、つまり、システム b はモバイルに基づいており、システム a の機能インターフェイスを呼び出す必要があるとします。
a は変更されないまま、つまりログイン検証とセッション ストレージは変更されないままですが、システム b はフロントエンド ユーザーのリクエストを処理できます。
ここで提供されるソリューションは php
を使用して実装されています
ユーザーがログインに成功すると、保存されたセッションの session-id がシステム B に返され、システム B は他のインターフェイスを要求するたびに session_id を保持します。
Aシステムは session_start の前に session_id (session_id) を追加します;
このようにして、システム b は安全に a を呼び出すことができます
セッション機能には
もあります
session_cache_expire — 現在のキャッシュの有効期限を返します
session_cache_limiter — 現在のキャッシュ リミッターを取得および/または設定します
session_commit — session_write_close のエイリアス
session_decode — 文字列からセッションデータをデコードします
session_destroy — セッションに登録されたすべてのデータを破棄します
session_encode — 現在のセッション データを文字列としてエンコードします
session_get_cookie_params — セッション Cookie パラメーターを取得します
session_id — 現在のセッション ID を取得および/または設定します
session_is_registered — グローバル変数がセッションに登録されているかどうかを確認します
session_module_name — 現在のセッションモジュールを取得および/または設定します
session_name — 現在のセッション名を取得および/または設定します
session_regenerate_id — 現在のセッション ID を新しく生成されたもので更新します
session_register — 現在のセッションに 1 つ以上のグローバル変数を登録します
session_save_path — 現在のセッションの保存パスを取得および/または設定します
session_set_cookie_params — セッション Cookie パラメータを設定します
session_set_save_handler — ユーザーレベルのセッションストレージ関数を設定します
session_start — セッションデータを初期化します
session_unregister — 現在のセッションからグローバル変数の登録を解除します
session_unset — すべてのセッション変数を解放します
session_write_close — セッションデータを書き込み、セッションを終了します