Javaでセッションを管理する最良の方法。クッキーはブラウザに保存され、後でアクセスできるため、このための信頼できるオプションではないと聞きました。これは正しいです?可能であれば、コーディング例で答えを見つけてください。
どれが最高ですか:
セッション管理(クライアント識別、Cookie処理、セッションスコープデータの保存など)は、基本的にappserver自体によって既に行われています。心配する必要はまったくありません。 HttpSession#setAttribute()
および #getAttribute()
により、セッション内のJavaオブジェクトを設定/取得することができます。 。クライアントがCookieをサポートしていない場合の本当に注意が必要なのは、URLの書き換えだけです。次に、jsessionid
識別子をURLに追加します。 JSPでは、JSTLの c:url
を使用できます。サーブレットでは、これに HttpServletResponse#encodeURL()
を使用できます。このようにして、サーバーは新しい要求URLを読み取ることでクライアントを識別できます。
あなたの新しい質問はおそらく「しかし、これはクッキーにどのように関係しているのでしょうか?サーバーはそれをどうやって行うのでしょうか?」でしょう。答えは次のとおりです。サーバーがクライアントからリクエストを受信し、サーバー側のコード(コード)が HttpSession
を HttpServletRequest#getSession()
まだ誰も作成されていない間(新しいセッションでの最初のリクエスト)、サーバーは新しいものを作成します。サーバーは、長く一意で推測しにくいID( HttpSession#getId()
で取得できるID)を生成し、このIDを値として設定しますjsessionid
という名前のCookie。内部では、サーバーは HttpServletResponse#addCookie()
を使用します。最後に、サーバーは、セッションIDをキーとして、Map
を値として、ある種のHttpSession
にすべてのセッションを保存します。
HTTP Cookie仕様 によれば、クライアントは後続のリクエストのヘッダーで同じCookieを送り返す必要があります。内部では、サーバーは HttpServletRequest#getCookies()
でjsessionid
Cookieを検索し、その値を決定します。このようにして、サーバーは関連するHttpSession
を取得し、HttpServletRequest#getSession()
を呼び出すたびにそれを返すことができます。
要点:クライアント側に保存されるのはセッションID(Cookieのフレーバー)のみであり、HttpSession
オブジェクト(そのすべての属性を含む)はサーバー側(Javaの)に保存されますメモリ)。自分でセッション管理を心配する必要はありません。また、セキュリティを心配する必要もありません。
すべてのJava WebフレームワークはCookieまたはURLエンコードされたセッションIDをサポートします。正しいアプローチを自動的に選択するため、何もする必要はありません。コンテナからセッションオブジェクトをリクエストするだけで、詳細を処理します。
[編集] Cookieと特別なURLの2つのオプションがあります。両方のアプローチに問題があります。たとえば、セッションをURLにエンコードすると、人々はセッションを渡すことができます(たとえば、URLをメールに入れて)。これを理解したい場合は、セキュリティに関する記事をいくつか読んで、アプリサーバーを構築してください。それ以外の場合:Javaアプリサーバーはあなたのために正しいことをします。それについて考えないでください。
CookieはセッションIDを保存するだけで、このIDはセッションの有効期限が切れると無効になります。
サーブレット仕様 は、標準J2EEアプリケーションでセッションデータにアクセス/設定するためのAPIを定義します。また、セッションデータはサーバー側に保存され、セッション識別子以外はクライアントに転送されないことを定義します。セッションIDの転送方法には2つのメカニズムがあります。
1)リクエストURL jessionid = ....
2)Cookie
メカニズムは、クライアントの機能に基づいて自動的に決定されます。
[〜#〜] edit [〜#〜]。最適なオプションはありません。方法を定義するサーブレット仕様があります。
Httpは、ステートレスなクライアント側プル専用プロトコルです。
ステートフルな会話を実装するには、Java EE Webサーバーはクライアント側で一部の情報(セッションID)を非表示にする必要があり、使用できるメカニズムはHTTPおよびHTML仕様に従う必要があります。
この目標を達成するには、次の3つの方法があります。
基本的に、最新のWebサーバーには、自動的に使用する方法を選択する「フィルター」があります。
したがって、ブラウザが既にCookieサポートをオフにしていることをサーバーが検出した場合、他の方法に切り替わります。