14

私はインタビューでもこの質問に直面しました。私はセッションスコープとJavaでのIT管理と多くの混乱を持っています。

web.xmlには、次のエントリがあります。

<session-config>
        <session-timeout>
            30
        </session-timeout>
</session-config>

それは実際に何を示していますか?プロジェクト全体の範囲ですか?

私を混乱させるもう1つのポイントは、同じプロジェクト内の複数のリクエストのセッションスコープをどのように分離できるかということです。PCからログインしていると同時に、別のPCからログインしている場合、それは区別されますか?

また、もう1つの紛らわしいのは、ブラウザーの違いです。さまざまなブラウザでさまざまなGmailを開くことができるのはなぜですか?また、Gmailは、セッションがログインしてログアウトするのを防ぐことができます。それは私たちの個人的なウェブでどのように維持されていますか?

4

6 に答える 6

26

セッション管理は、Javaとサーブレットに限定されるものではありません。おおまかに次のようになります。

  1. HTTPプロトコルはステートレスであるため、サーバーとブラウザーには、複数のリクエストを通じてユーザーのIDを保存する方法が必要です。
  2. ブラウザは最初のリクエストをサーバーに送信します
  3. サーバーは、ブラウザがセッションCookieで識別したかどうかを確認します(以下を参照)。

    3.1。サーバーがクライアントを「認識」していない場合:

    • サーバーは新しい一意の識別子を作成し、それをキーとしてマップに(大まかに)配置します。その値は新しく作成されたセッションです。また、一意の識別子を含むCookie応答を送信します。

    • ブラウザは、一意の識別子を含むセッションCookie(有効期間=ブラウザインスタンスの有効期間)を保存し、それを後続の各リクエストに使用して、それ自体を一意に識別します。

    3.2。サーバーがすでにクライアントを知っている場合-サーバーは、セッションCookieで見つかった渡された一意の識別子に対応するセッションを取得します

今あなたが持っているいくつかの質問に:

  • セッションタイムアウトは、アクセスされずに各セッションマップエントリが存続する時間です。つまり、クライアントが(例から)30分間リクエストを送信しない場合、セッションマップはこのエントリをドロップし、クライアントがセッションCookie内の一意のキーで自分自身を識別しても、データは存在しません。サーバー上。

  • セッションCookieはブラウザごとであるため、さまざまなGmail(および任意のサイト)をさまざまなブラウザで開くことができます。つまり、各ブラウザは、一意のセッションIDを送信しないか、サーバーが生成したセッションIDを送信することにより、自身を一意に識別します。

  • 異なるPCからのロギングは実際には同じです-セッションIDを共有しません

  • ログアウトとは、実際にはサーバー上のセッションIDのエントリを削除することです。

注:代わりに、一意のセッションIDを保存することもできます。

于 2010-06-18T05:39:31.833 に答える
2

それは実際に何を示していますか?

セッションの存続期間。クライアントとサーバーの間に30分間トランザクションがない場合、セッションは期限切れになります(コードセグメントごと)

プロジェクト全体の範囲ですか?

アプリケーションスコープがあります。Webアプリケーションごとに定義

私を混乱させるもう1つのポイントは、同じプロジェクト内の複数のリクエストのセッションスコープをどのように分離できるかということです。PCからログインしていると同時に、別のPCからログインしている場合、それは区別されますか?

はい。セッションID(Apache Tomcatの場合はJSESSIONID)は異なります。

また、もう1つの紛らわしいのは、ブラウザーの違いです。さまざまなブラウザでさまざまなGmailを開くことができるのはなぜですか?

異なるブラウザからの同じユーザーによる各ログインは、まったく異なるセッションです。また、あるブラウザで設定されたCookieが別のブラウザに影響を与えることはありません。そのため、ブラウザごとに異なるGmailインスタンスが可能です。

また、Gmailは、セッションがログインしてログアウトするのを防ぐことができます。それは私たちの個人的なウェブでどのように維持されていますか?

永続的なCookie

于 2010-06-18T05:33:53.623 に答える
0

Javaのサーブレットには、ユーザーの状態情報を格納するために使用できるHttpSessionオブジェクトがあります。セッションは、Cookie(JSESSIONID)によってクライアント上で管理されるか、URL書き換えを使用して実行できます。セッションタイムアウトは、サーバーがHttpSessionに格納されている状態情報を削除する前に最後の要求から待機する時間を示します。

スコープはブラウザインスタンスごとであるため、この例では、2つの異なるPCからログインすると、2つのセッションオブジェクトが生成されます。

于 2010-06-18T05:31:22.317 に答える
0

同じアプリケーションを異なるウィンドウで開くと、ブラウザの複数のインスタンスを意味し、インスタンスごとに異なるセッションが作成されます。

于 2010-06-18T15:50:36.047 に答える
0

セッション管理、認証、承認のためにApacheShiroをお勧めします。

私はそれを取り戻します。

@BalusCが以下に示すように、httpセッションの管理を担当するのはサーブレットコンテナのみです。シロはそれを使っているだけです。明示的に定義したフィルターを介してHttpSessionにフックします。

于 2013-01-10T14:00:35.507 に答える
0

セッションを管理する方法は4つあります。

1.Cookies2.URL書き換え3.非表示のフォームフィールド4.HTTPセッション

4つ目は強力で、今日ではほとんど使用されています。

于 2013-03-20T15:33:14.493 に答える