シナリオは次のとおりです。シングル ページ アプリ (AJAX ベース)、Cookie を許可しないがセッションが必要な環境、およびバックエンドの Tomcat (または JBoss)。
バックエンド コンテナー (Tomcat) にセッションを管理させる最も簡単な方法は何ですか?
JSESSIONID=SESSION_ID_GOES_HERE を作成するすべての AJAX リクエストに単純に追加する必要がありますか?Tomcat がセッションを取得するのに十分ですか?
シナリオは次のとおりです。シングル ページ アプリ (AJAX ベース)、Cookie を許可しないがセッションが必要な環境、およびバックエンドの Tomcat (または JBoss)。
バックエンド コンテナー (Tomcat) にセッションを管理させる最も簡単な方法は何ですか?
JSESSIONID=SESSION_ID_GOES_HERE を作成するすべての AJAX リクエストに単純に追加する必要がありますか?Tomcat がセッションを取得するのに十分ですか?
はい、正確に、Cookie を使用できない場合は、サーバーへの呼び出しの間に JSessionid を追加して同じことを実現できます。これを URL 書き換えと呼びます。
ブラウザに返されるリンクに jsessionid を追加する必要があります。これにより、ブラウザはその後の呼び出しを同じ jsessionid でサーバーに送信します。ただし、それを行うには、サーブレットの応答パラメーターのメソッドを使用する必要があります。encodeURl() および setRedirect() を使用して、JSessionId を適切にアタッチします (本当に必要な場合)。
たとえば、サーブレット/jsp に次のリンクがあるとします。
out.println("<a href=\"/mycontext/newpage\">Next Page<a>");
あなたはそれを書くべきです:
out.println("<a href=\"");
out.println(response.encodeURL ("/mycontext/newpage"));
out.println("\">Next Page</a>");
JSessionId が必要な場合 (たとえば、Cookie が無効になっている場合) は、JSessionId が自動的にアタッチされます。
同様に、リダイレクトを送信する必要がある場合は、次のようにする必要があります。
response.sendRedirect (response.encodeRedirectURL
("http://myhost/mycontext/newpage"));
詳細については、HttpServletResponseの JDK API を参照してください。