| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Cookie

提供: MyMemoWiki
2020年2月15日 (土) 08:34時点におけるPiroto (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

Cookie

セッション維持とCookie

  • Java Web アプリケーションでは、ブラウザのセッション維持の為に、基本的にCookieを利用する。
  • デフォルトではCookie名は、JSESSIONID
  • ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下の[4.4 Webコンテナがセッション管理を行う場合、クッキーやURLの書き換え] [メソッドでセッションキーをURLに埋め込む]ことで対応する。
    • HttpServletResponse.encodeRedirectURL(url)
    • HttpServletResponse.encodeURLL(url)
  • フレームワークを利用すると、そのあたりを自動でやってくれることが多い。
    • Struts 1.xでは、<html:form>や<html:rewrite>等に指定したURLは、自動で上記、セッションキーをURLに付加する処理を行ってくれる。
サンプル

サンプルコード

  1. protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
  2. PrintWriter writer = res.getWriter();
  3. StringBuilder buf = new StringBuilder();
  4. final String key_date = "first access time";
  5. HttpSession session = req.getSession(true);
  6. String ftime = (String)session.getAttribute(key_date);
  7. if (ftime == null) {
  8. ftime = (new Date()).toString();
  9. session.setAttribute(key_date, ftime);
  10. // CookieがOffの場合の対策 1
  11. // res.sendRedirect(res. ("/CookieTest/cookie.test"));
  12. // return;
  13. }
  14. buf.append("<html>");
  15. buf.append("<head>");
  16. buf.append("</head>");
  17. buf.append("<body>");
  18. buf.append("<a href='/CookieTest/cookie.test'>reload</a>");
  19.  
  20. // CookieがOffの場合の対策 2
  21. // buf.append("<a href='"+ res.encodeURL("/CookieTest/cookie.test") + "'>reload</a><br>");
  22. buf.append("first access time : " + ftime + "<br>");
  23. buf.append("</body>");
  24. buf.append("</html>");
  25. writer.write(buf.toString());
  26. writer.flush();
  27. writer.close();
  28. }

実行 0316 cook00.jpg

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

ブラウザ用デバッグツール | Developer Toolbar | で確認 0317 cook01.jpg

  • Firefox

0318 cook02.jpg

  • Telnet
  1. >telnet localhost 8080
  2. GET http://localhost:8080/CookieTest/cookie.test HTTP/1.1
  3.  
  4.  
  5. HTTP/1.1 200 OK
  6. Server: Apache-Coyote/1.1
  7. Set-Cookie: my_name=yagi; Expires=Tue, 04-Mar-2008 01:09:34 GMT
  8. Set-Cookie: JSESSIONID=9A5DE963413D4C8CC0B5A8C78A7E1BCE; Path=/CookieTest
  9. Transfer-Encoding: chunked
  10. Date: Tue, 04 Mar 2008 01:03:34 GMT
  11.  
  12. b7
  13. <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>
  14. 0

明示的にCookieを利用

  1. Cookie cookie = new Cookie("my_name", "yagi");
  2. cookie.setMaxAge(360);
  3. res.addCookie(cookie);
  • IE

0319 cook03.jpg

  • Firefox

0320 cook04.jpg


JavaScript

参照
  1. document.cookie
Bookmarklet

Cookieを表示

  1. 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();----