[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00439] encodeURL をつかったセッション維持



こんにちわ。大島です。
現在、Java 認定試験の Web コンポーネントディベロッパの勉強を
しています。

encodeURL を使って、Cookie がブラウザ側で無効になっている場合でも
セッション維持ができる方法について学んでいますが、
思い通りの動作になりません。

encodeURL をつかって、セッションID が URL に付加されることと、
そのURLでアクセスしたサーブレット側で request.getRequestedSessionId() を
実行することで、セッションIDが正常に request に保持されている
ことまで確認できました。

しかし、この request オブジェクトから request.getSession() を実行すると
セッションID に結びつけられたオブジェクトが返されずに、必ず
新しいセッションIDをもったオブジェクトが返されます。

以下に、サーブレットのコードを添付いたします。何か勘違いをした
書き方をしているのでしょうか。

環境
OS : Fedora core 2
Tomcat : version 5.0.28

public class SessionTest extends HttpServlet {

protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//TODO Method stub generated by Lomboz
HttpSession session = request.getSession(true);
String id = session.getId();
String mode = request.getParameter("mode");
if (mode != null && mode.equals("destroy")){
session.invalidate();
session = request.getSession();
}
Integer num = (Integer)session.getAttribute("num");
int num1;
if (num == null) {
num1 = 0;
}
else {
num1 = num.intValue();
}
num1++;
Integer num2 = new Integer(num1);
session.setAttribute("num", num2);
PrintWriter out = response.getWriter();
out.println("<html><body><h2>Session Test</h2>");
out.println("<p>sessionid="+id+"</p>");
out.println("<p>sessionid="+session.getId()+"</p>");
out.println("<p>requestedsessionid="+request.getRequestedSessionId()+"</p>");
out.println("<p>uri="+request.getRequestURL()+"</p>");
out.println("<p>num="+num+"</p>");
out.println("<form>");
out.println("<input type=\"submit\" name=\"mode\" value=\"destroy\">");
out.println("</form>");
out.println("<a href="+response.encodeURL("/testapp3/SessionTest/")+"/>SessionTest</a>");
out.println("<a href="+response.encodeURL("/testapp3/test/")+"/>test</a>"); out.println("</html></body>");
}
}


*************************
しあわせ太郎のCGI光房
http://happytaro.pekori.jp/Home/
Yukie Oshima
***************************