3

私の理解によると、同じセッションは同じブラウザ ウィンドウの異なるタブ間で共有されます。また、異なるブラウザ ウィンドウに対して、異なるセッションが作成されます。今、私の理解に関するいくつかの質問:-

1) 2 つの異なるブラウザー ウィンドウで Web アプリケーションを実行すると、Firefox コンソールに同じ jsession ID が表示されます。2 つの異なるブラウザー ウィンドウ間で同じセッション セッションを共有する方法。デフォルトでは、セッションは Web サーバーによって作成された jsessionId の助けを借りて Cookie によって維持されます。各 URL 要求で jsessionId を渡すことによってセッションを維持する URLRewriting を通じてセッションを維持する別の方法。プロジェクトで org.tuckey.web.filters.urlrewrite.UrlRewriteFilter を使用していることがわかりますが、このクラス ドキュメントは魔法のように多くのセッション メンテナンスを行っていないようです。同じセッションが2つの異なるブラウザウィンドウとそれを行うための技術的アプローチに接続されている理由がわかりません

2) 同様に、同じブラウザ ウィンドウの 2 つの異なるタブで 2 つの異なるアプリケーションを実行すると、おそらく google と他の Web サイトが yahoo と表示されます。これら 2 つの Web サイトの Firefox コンソールに同じ jsessionId が表示されません。ウェブサイトは、タブごとに新しいセッションを生成するために、ここで特別なことを行っていますか? 実際、一部のWebサイト(おそらくGoogleの場合)では、Firefoxウィンドウの下にjsessionIdがまったく表示されません。どのように可能です。私の理解では、それはウェブサーバーによって自動的に生成され、Cookie または URLReWriting によって渡されますか?

セッション管理のためにここに投稿された各ポイントを理解することが重要であるため、誰かが私の質問にインラインで回答できると助かります

更新:-さまざまなシナリオで質問をさせてください:-

1) 同じブラウザ ウィンドウの 2 つの異なるタブで 2 つの異なる URL (たとえば、google.com と stackoverflow.com) にアクセスします。

私の理解:- 2 つの異なるドメイン/ポートに対して 2 つの Cookie が作成されるため、2 つのセッションが作成されます。

2) 同じブラウザ ウィンドウの 2 つの異なるタブで 2 つの同じ URL (たとえば、stackoverflow.com) にアクセスします。

私の理解:- 同じ Cookie が再利用されるため、1 つのセッションが作成されます。

3) ブラウザ (firefox) のまったく異なる 2 つのウィンドウで、2 つの同じ URL (たとえば、stackoverflow.com) にアクセスします。

私の理解:- この場合、いくつのセッションが作成されますか?

4

2 に答える 2

4

あなたの最初の仮定は正しくありません。Cookie を使用したセッション管理 (Java サーブレット コンテナーのデフォルト) を使用すると、同じブラウザー インスタンスのすべてのウィンドウでセッションが表示されます。

セッションに対してのみ URL 書き換えを使用するように Java サーブレット サーバーを構成すると、タブごとに 1 つのセッションを持つことができます。

通常、2 つの異なる Java Web アプリケーションは常に、独自のアプリケーション スコープに対してのみ有効な 2 つの異なるセッション Cookie を作成します。Cookie はドメインとパスにバインドされます。

PHP などの他の Web フレームワークは、これをまったく異なる方法で処理できます。

于 2013-04-23T15:15:39.493 に答える
1

Cookie jsession_id はサーバーによって作成され、HTTP ヘッダー Set-Cookie を介したリクエストと引き換えにブラウザに送信されます。Cookie は、ブラウザによってクライアントに保存されます。以降、ブラウザーは同じドメインでの後続のすべての要求に対してその Cookie を再送信します (Cookie は安全なパスhttps://en.wikipedia.org/wiki/HTTP_cookie#Terminologyで制限できますが、ここでは関係ありません)。

ブラウザーはすべてのタブ (基本的な権限とセキュリティ) からその Cookie にアクセスできます。セッションを分離する (すべてのタブで同じ Cookie) か、それらをマージする (すべてのタブで同じ Cookie、したがって、すべてのタブで同じセッション同じドメイン)。私の知る限り、すべてのブラウザーはタブで Cookie を共有することを選択していますが、私は専門家ではありません。

したがって、同じ Java プログラムの複数のインスタンスでセッションを維持するには、同じことを行い、jsession_id Cookie を各インスタンスのメモリの外部 (ファイルなど) に保存する (関連する場合は再利用する) 必要があります。セキュリティが重要な場合、これは些細なことではないかもしれません。

ポイント 2 については、両方の Cookie が jsession_id であっても、異なるドメインに関連付けられている (そして各サーバーによって設定されている) ため、それらが等しいという理由はないことを理解することが重要です。

于 2013-04-23T15:28:39.947 に答える