1

セッションについてHTTP:CookieまたはURL書き換えのいずれかを介して実装されます。

は持続的接続を使用しているためHTTP 1.1、TCP接続が切断されるとセッションが無効になると想定しています。か否か?
そうでなければ、CookieとURL書き換えを使用した動作は同じではないので、私はこれについて混乱していますよね?つまり、ブラウザはURL書き換えの値の部分をディスクに保存しないということですよね?

さらに、そうでない場合、tcp接続がリセットされたときにサーバー上でプログラムで無効にするにはどうすればよいですか?Tomcatにそのようなリスナーはありますか?

4

1 に答える 1

4

HTTP 1.1は持続的接続を使用しているため、TCP接続が切断されるとセッションが無効になると思います。か否か?

これは間違っています。

Javaでは、セッションは通常Cookie(tomcat、jettyなど)を介して実装されます。JSESSIONID = 1234567(番号はランダムに生成され、セッションを識別する)と呼ばれるCookieが最初の応答でサーバーから設定され、その後ブラウザーに保存され、その後の接続ごとにサーバーに返送されます。このCookieのデフォルトの有効期間は通常30分で、tcp接続が中断されても存続します。これにより、サーバーはさまざまな接続でユーザーを認識できます。

URL書き換えとは、すべてのURLにURLの一部としてJSESSIONIDが含まれていることを意味します。サーバー側では、JSESSIONID値がCookieからではなくURLから読み取られることを除いて、何も変更されません。

tcp接続が閉じられた後にCookieが失われた場合、それは完全に役に立たなくなりました。永続的なtcp接続に基づくチャットシステムを想像してみてください。ソケットにバインドされた識別子から接続を簡単に識別できる場合、Cookieが必要ですか?いいえ...Cookieは、複数の接続でユーザーを追跡する必要があるため、非常に便利です。

HTTP 1.1は持続的接続を使用するため、

これらは永続的です。つまり、最初のリクエスト(htmlページ)の後、同じ接続を再利用して他のリソース(images、css、javascriptなど)も送信できます。また、ユーザーが別のリンクをクリックした場合に新しい接続が再作成されないように、ブラウザーはしばらくの間接続を開いたままにします。これは単なる最適化であり、ブラウザでURLを開いたときに、同じWebサイトにいる間ずっと接続が維持されるという意味ではありません。

さらに、そうでない場合、tcp接続がリセットされたときにサーバー上でプログラムで無効にするにはどうすればよいですか?Tomcatにそのようなリスナーはありますか?

サーバーでは、いつでもセッション呼び出しを無効にすることができますsession.invalidate()。リクエストが行われるたびにセッションを無効にしたい場合は、セッションは必要ありません。

Cookieは、javascriptを介してクライアント側で無効にすることもできます。

そうでなければ、CookieとURL書き換えを使用した動作は同じではないので、私はこれについて混乱していますよね?つまり、ブラウザはURL書き換えの値の部分をディスクに保存しないということですよね?

URLの書き換えは、Cookieが無効になっている場合に機能します。基本的に、リンクをクリックするたびにJSESSIONID =がURLに追加されるため、サーバーはユーザーを識別し、後続のすべてのリンクは同じJSESSIONIDを持つサーバーで引き続き生成されます。このようにして、すべてのPOSTまたはGETリクエストには、ユーザー(セッション)のIDが含まれます。

Cookieは同じように機能しますが、URLにハードコーディングされる代わりに、ヘッダー情報としてHTTPリクエストに埋め込まれます。これは、ブラウザによって自動的に行われます(無効にされていない場合)。

それはディスクに保存されることを意味するのではなく(どのような目的で?)、セッションCookie(ブラウザを閉じるか30分後に期限切れになる)のためにメモリに保持するだけです。

Cookieの寿命を長く設定できます。その場合、ブラウザはCookieをより長い時間保存します。ただし、通常、これらは「セッションCookie」ではなく、特定のユーザー(UUIDなど)を識別するために使用されるCookieです。UUID Cookieから、同じユーザーが再接続したときに新しいセッションCookieを作成できます。

セッションは、会話を追跡するために使用されます。ユーザーがブラウザを閉じると、会話が終了します。UUIDのような永続的なCookieがある場合は、そのCookieを使用して新しい会話を作成し、以前に会った同じユーザーに新しいセッションをバインドできます。

于 2013-02-15T20:23:00.613 に答える