HTTPセッションの追跡
-
20-09-2019 - |
質問
HTTP はステートレス プロトコルであるため、クライアントがサーバーに対して多数のリクエストを行う場合、サーバーは、t1、t2、t3 などの期間にわたる特定のクライアントのリクエストをどのように一意に識別するのでしょうか。
Web を閲覧していると、セッション ID、URL 書き換え、Cookie などの用語に遭遇しました。しかし、誰かがそれをより良い方法で説明してくれれば素晴らしいでしょう。具体的には、HTTP リクエストとレスポンスのどの部分がセッション追跡に使用されるのでしょうか?
解決
、HTTPセッショントラッキングを実装するための一般的な方法は、URLの書き換えとクッキーが含まれます。セッショントラッキングは、基本的にはセッションIDがサーバーに複数の要求間で維持されている必要があります。これは、特定のクライアントがサーバに要求を行うたびに、それは同じセッションIDを渡すことを意味します。サーバーは、それが維持セッション情報を検索するために、このIDを使用することができます。
クッキーを使用する場合は、、サーバーはSet-Cookie
のHTTPレスポンスヘッダを設定することにより、クッキーを保存するために、クライアントを要求します。このクッキーは、そのクライアントに割り当てられた一意のセッションIDが含まれている - この例では文字列「ABAD1D」:
Set-Cookie: JSESSIONID=ABAD1D;path=/
クッキーは、その後、要求ごとにCookie
のHTTPリクエスト・ヘッダーを使用して、クライアントがサーバに送り返されるので、サーバは、各要求現在クライアントに割り当てられたセッションIDに通知される。
Cookie: JSESSIONID=ABAD1D
URL書き換えを使用する場合には、これと同じセッションIDが代わりにURLのどこかに送信されます。それは特定のクライアントのセッションをルックアップできるように、ここでも、サーバは、URLからセッションIDを抽出します:
http://my.app.com/index.jsp;JSESSIONID=ABAD1D
しかし、サーバーはクライアントに送り返されたWebページ内の任意のURLがその特定のクライアントのセッションIDを含むように書き換えされていることを確認する必要があります。セッションIDがURLでエンコードされているように、セッション追跡のこの方法は、ブラウザに対して透明です。多くの場合、サーバはクライアントのセッションクッキーを設定することができない見つけた場合、URL書き換えに頼るだろう - 。クライアントは/はクッキーを許可しサポートしていないことを意味している。
セッションが期限切れになることに注意してください。これは、サーバーが一定時間与えられたセッションIDを「見る」していない場合、それは資源を維持するためにセッションデータを削除することができることを意味します。
他のヒント
HTTPの具体的にどの部分 要求と応答がために使用されるであろう セッショントラッキング?
HTTPレスポンスでは、サーバーはクッキーを設定することができます。これは、Set-Cookieヘッダーでそう。たとえばます:
Set-Cookie: session=12345; path=/
クライアントは、パス(上記)およびドメインを含むことができるクッキーと一緒に設定された特性に一致するすべてのクッキーの値を返し、それがまだ満了していない。
クッキーは、HTTPヘッダーの一部としてサーバーに送り返されます。たとえばます:
Cookie: session=12345
元のプロパティ情報のいずれも、クッキーと送り返されません。
ユニークなクッキーは、サーバが特定のブラウザインスタンスを持つ一意のキーを関連付けることができます。サーバは、次に、ハッシュテーブルへのインデックスまたは一意のユーザーごとの状態情報を保持するデータベーステーブルとしてそのキーを使用することができます。
セッション追跡は、サーバー側のものです。
Webサーバがブラウザに返されるいくつかのセッション識別子を発行します。ブラウザが各要求と共に、このセッション識別子を提出します。
これはおそらく、ユーザーのために透過的にクッキーを使用して行われます。
セッション処理は、クライアントにクッキーに送信することにより、取り扱わほとんどの場合であり、 。そのクッキーは、その特定のクライアントからのリクエストごとにサーバーに送り返されます。
session id
は、このリソースを見つけて、それがあったクライアントを知ることができますクッキーにsession id
を読み取ることによって、サーバ側(ファイル、ラム・スペース)は、サーバー上のいくつかのリソースに関連付けられます。
十分な詳細を見つける ここ
HTTPセッション が推奨されるアプローチです。セッションは、会話中に同じブラウザから発信されたリクエストを識別します。すべてのサーブレットは同じセッションを共有できます。JSESSIONID はサーバーによって生成され、Cookie、URL 書き換え (Cookie がオフになっている場合)、または組み込みの SSL メカニズムを通じてクライアントに渡すことができます。セッションに保存されるオブジェクトのサイズを最小限に抑えるよう注意する必要があり、セッションに保存されるオブジェクトはシリアル化可能である必要があります。Java サーブレットでは、セッションは次のように取得できます。
HttpSession セッション = request.getSession();// 現在のセッションまたは新しいセッションを返します
セッションはタイムアウトにするか (web.xml で構成)、手動で無効にすることができます。