web-dev-qa-db-ja.com

HTTPセッショントラッキング

HTTPはステートレスプロトコルであるため、クライアントがサーバーに多数のリクエストを送信すると、サーバーは特定のクライアントのリクエストを特定の期間、t1、t2、t3などでどのように一意に識別するのですか。

私はウェブを閲覧して、セッションID、URL書き換え、Cookieなどの用語に出くわしました。しかし、誰かがより良い方法でそれを説明できれば素晴らしいでしょう。具体的には、HTTPリクエストとHTTPレスポンスのどの部分がセッショントラッキングに使用されますか?

27
dexter

おっしゃったように、HTTPセッショントラッキングを実装する一般的な方法には、URLの書き換えとCookieが含まれます。セッション追跡では、基本的に、サーバーへの複数の要求にわたってセッションIDが維持される必要があります。つまり、特定のクライアントがサーバーにリクエストを行うたびに、同じセッションIDを渡します。サーバーはこのIDを使用して、維持しているセッション情報を検索できます。

Cookieを使用する場合、サーバーはSet-Cookie HTTP応答ヘッダーを設定して、Cookieを保存するようクライアントに要求します。このCookieには、そのクライアントに割り当てられた一意のセッションIDが含まれています-この例では、文字列 'ABAD1D':

    Set-Cookie: JSESSIONID=ABAD1D;path=/

次に、各リクエストのCookie HTTPリクエストヘッダーを使用して、クライアントがCookieをサーバーに送り返します。これにより、サーバーは各リクエストで、現在クライアントに割り当てられているセッションIDに通知されます。

    Cookie: JSESSIONID=ABAD1D

URL書き換えを使用する場合、この同じセッションIDが代わりにURLのどこかに送信されます。この場合も、サーバーはURLからセッションIDを抽出して、特定のクライアントのセッションを検索できるようにします。

    http://my.app.com/index.jsp;JSESSIONID=ABAD1D

ただし、サーバーは、クライアントに送り返されたWebページ内のURLも、その特定のクライアントセッションIDを含むように書き換えられることも確認する必要があります。セッションIDはURLにエンコードされているため、このセッショントラッキングの方法はブラウザに対して透過的です。多くの場合、サーバーは、クライアントにセッションCookieを設定できないことが判明した場合、URLの書き換えに頼ります。これは、クライアントがCookieをサポート/許可していないことを意味します。

セッションが期限切れになる可能性があることに注意してください。つまり、サーバーが特定のセッションIDを一定期間「確認」しない場合、セッションデータを削除してリソースを保護することがあります。

42
teabot

具体的には、HTTPリクエストとHTTPレスポンスのどの部分がセッショントラッキングに使用されますか?

HTTP応答では、サーバーはCookieを設定できます。これは、Set-Cookieヘッダーで行われます。例えば:

Set-Cookie: session=12345; path=/

次に、クライアントは、Cookieと共に設定されたプロパティに一致するすべてのCookieの値を返します。これには、パス(上記のとおり)とドメインを含めることができ、まだ有効期限が切れていません。

Cookieは、HTTPヘッダーの一部としてサーバーに送り返されます。例えば:

Cookie: session=12345

元のプロパティ情報はCookieで返送されません。

一意のCookieを使用すると、サーバーは一意のキーを特定のブラウザインスタンスに関連付けることができます。サーバーはそのキーを、ユーザーごとの一意の状態情報を保持するハッシュテーブルまたはデータベーステーブルへのインデックスとして使用できます。

10
RickNZ

セッショントラッキングはサーバー側のものです。

Webサーバーは、ブラウザーに返されるセッションIDを発行します。ブラウザは、各リクエストとともにこのセッション識別子を送信します。

これはおそらく、ユーザーに対して透過的にCookieを使用して行われます。

1
user151323

ほとんどの場合、セッション処理は cookie をクライアントに送信することで処理されます。そのCookieは、特定のクライアントからのすべてのリクエストでサーバーに送り返されます。

session idはサーバー側のいくつかのリソース(ファイル、RAMスペース)に関連付けられるため、サーバーはsession id Cookieでこのリソースを見つけ、それがどのクライアントであったかを知ることができます。

1
RageZ

十分な詳細を見つける ここ

HTTPセッションが推奨されるアプローチです。セッションは、会話の期間中に同じブラウザから発生したリクエストを識別します。すべてのサーブレットが同じセッションを共有できます。 JSESSIONIDはサーバーによって生成され、Cookie、URLの書き換え(Cookieが無効になっている場合)、または組み込みのSSLメカニズムを介してクライアントに渡すことができます。セッションに格納されるオブジェクトのサイズを最小化するように注意する必要があり、セッションに格納されるオブジェクトはシリアライズ可能でなければなりません。 Javaサーブレットでは、セッションは次のように取得できます。

HttpSessionセッション= request.getSession(); //現在のセッションまたは新しいセッションを返します

セッションはタイムアウトするか(web.xmlで構成)、手動で無効にすることができます。

1