トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

Cookie



目次



記事一覧

キーワード

Cookie


セッション維持とCookie

  • Java Web アプリケーションでは、ブラウザのセッション維持の為に、基本的にCookieを利用する。
  • デフォルトではCookie名は、JSESSIONID
  • ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下のメソッドでセッションキーをURLに埋め込むことで対応する。
    • HttpServletResponse.encodeRedirectURL(url)
    • HttpServletResponse.encodeURLL(url)
  • フレームワークを利用すると、そのあたりを自動でやってくれることが多い。
    • Struts 1.xでは、<html:form>や<html:rewrite>等に指定した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("<html>");
   buf.append("<head>");
   buf.append("</head>");
   buf.append("<body>");
   buf.append("<a href='/CookieTest/cookie.test'>reload</a>");

   // CookieがOffの場合の対策 2
   // buf.append("<a href='"+  res.encodeURL("/CookieTest/cookie.test") + "'>reload</a><br>");
   buf.append("first access time : " + ftime + "<br>");
   buf.append("</body>");
   buf.append("</html>");
   
   writer.write(buf.toString());
   writer.flush();
   writer.close();
 }

実行


  • セッションを利用する単純なアプリケーションを動かすと、以下のようなCookieが利用される。

Developer Toolbarで確認

  • Firefox
  • 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
<html><head></head><body><a href='/CookieTest/cookie.test;jsessionid=9A5DE963413D4C8CC0B5A8C78A7E1BCE'>reload</a><br>first access time : Tue Mar 04 10:03:34 JST 2008<br></body></html>
0

明示的にCookieを利用

Cookie cookie = new Cookie("my_name", "yagi");
cookie.setMaxAge(360);
res.addCookie(cookie);
  • Firefox


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]+";<br><br>");}w.document.close();----



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.