!!!Cookie *http://www.ietf.org/rfc/rfc2109.txt *http://www.studyinghttp.net/cookies *http://www.futomi.com/lecture/cookie/specification.html !セッション維持とCookie *Java Web アプリケーションでは、ブラウザのセッション維持の為に、基本的にCookieを利用する。 *デフォルトではCookie名は、JSESSIONID *ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下の[[メソッドでセッションキーをURLに埋め込む|4.4 Webコンテナがセッション管理を行う場合、クッキーやURLの書き換え]]ことで対応する。 **HttpServletResponse.encodeRedirectURL(url) **HttpServletResponse.encodeURLL(url) *フレームワークを利用すると、そのあたりを自動でやってくれることが多い。 **Struts 1.xでは、等に指定したURLは、自動で上記、セッションキーをURLに付加する処理を行ってくれる。 ::サンプル サンプルコード protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter writer = res.getWriter(); StringBuilder buf = new StringBuilder(); final String key_date = "first access time"; HttpSession session = req.getSession(true); String ftime = (String)session.getAttribute(key_date); if (ftime == null) { ftime = (new Date()).toString(); session.setAttribute(key_date, ftime); // CookieがOffの場合の対策 1 // res.sendRedirect(res. ("/CookieTest/cookie.test")); // return; } buf.append(""); buf.append(""); buf.append(""); buf.append(""); buf.append("reload"); // CookieがOffの場合の対策 2 // buf.append("reload
"); buf.append("first access time : " + ftime + "
"); buf.append(""); buf.append(""); writer.write(buf.toString()); writer.flush(); writer.close(); } 実行 {{ref_image cook00.jpg}} *セッションを利用する単純なアプリケーションを動かすと、以下のようなCookieが利用される。 *IE [[Developer Toolbar|ブラウザ用デバッグツール]]で確認 {{ref_image cook01.jpg}} *Firefox {{ref_image cook02.jpg}} *Telnet >telnet localhost 8080 GET http://localhost:8080/CookieTest/cookie.test HTTP/1.1 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: my_name=yagi; Expires=Tue, 04-Mar-2008 01:09:34 GMT Set-Cookie: JSESSIONID=9A5DE963413D4C8CC0B5A8C78A7E1BCE; Path=/CookieTest Transfer-Encoding: chunked Date: Tue, 04 Mar 2008 01:03:34 GMT b7 reload
first access time : Tue Mar 04 10:03:34 JST 2008
0 !明示的にCookieを利用 Cookie cookie = new Cookie("my_name", "yagi"); cookie.setMaxAge(360); res.addCookie(cookie); *IE {{ref_image cook03.jpg}} *Firefox {{ref_image cook04.jpg}} !JavaScript ::参照 document.cookie ::Bookmarklet Cookieを表示 javascript:c=document.cookie;w=open('_blank');cs=c.split(";");for(i=0;i<5;i++){w.document.write(cs[i]+";

");}w.document.close();----