1

javax.servlet.http.HttpSessionのドキュメントについて混乱しています。
それは言います:

セッションは、複数のページ要求にわたって状態とユーザー ID を維持するために使用されます。セッションは、Cookie を使用するか、URL を書き換えることによって維持できます。

現在、Cookie と URL 書き換えの両方が、サーバー内のアプリケーション コード (つまり、私たちのコード) によって処理されます。

次に、セッションがいつと見なされるかについて次のように述べていますnew

サーバーは、クライアントがセッションに参加するまで、そのセッションを新しいものと見なします。クライアントがセッションに参加するまで、isNew メソッドは true を返します。true の値は、次の 3 つのケースのいずれかを示している可能性があります
。1. クライアントがまだセッションについて認識していない
2. セッションがまだ開始されていない
3. クライアントが選択していないセッションに参加します。このケースは、クライアントが Cookie のみをサポートし、サーバーから送信された Cookie を拒否することを選択した場合に発生します。サーバーが URL 書き換えをサポートしている場合、このケースは通常発生しません。

client has joined the session. _

つまり、Web アプリケーション (または URL 書き換え) から Cookie を使用せず、次のようにします。

  1. IP A からサーバーへの POST
  2. サーバーから A への 200 OK
  3. IP A からサーバーへの POST

ステップ 3 では、session.isNew()true または false が返されますか? ドキュメントからはわかりません。
false (つまり、セッションが新しくない) が返さsession.invalidate()れ、新しいセッションを作成するために呼び出す必要がありますか?
これが私をさらに混乱させる理由は、クライアントが HTTP アプリケーションであり、Web ブラウザーではないコードをデバッグしているためです。ステップ 3では、サーバー コードに Cookie や URL の書き換えはありsession.isNew()ませんが、返されません。 true.
そのため、ボンネットの下で何が起こっているのかわかりません。
これを理解するのに役立つ情報はありますか?

4

1 に答える 1

3

セッション トラッキングの良い例を次に示します。

Client has joined the sessionクライアントが後続のリクエストを行い、ウェブサーバーが認識できるセッション ID を含めたことを意味します。Cookie が有効なjsessionid場合 - Cookie と共に渡されます。それ以外の場合 - URL 自体に含める必要があります - このようにhttp://localhost:8080/bookstore1/cashier;jsessionid=c0o7fszeb1

In JSP c:urlfrom Core Tag Library は、URL の書き換えを処理します。

B2B 通信の場合、セッション ID を自分で取得し、後続のリクエストに手動で含める必要があります。

例:

  1. IP A からサーバーへの POST
  2. サーバーから A への 200 OK
  3. session idAは応答から取得します
  4. IP A からサーバーへの POST と取得したインクルードsession id

アップデート:

優れた記事「Web ベースのセッション管理: HTTP ベースのクライアント セッションを管理するためのベスト プラクティス」を読むことを検討してください。 これは、HTTP セッションをエミュレートする方法の一般的な概要であり、Java とは関係ありません。

于 2012-01-13T07:38:15.413 に答える