トップ 一覧 ping 検索 ヘルプ RSS ログイン

Cookieの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!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では、<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();
  }

実行
{{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
 <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);
*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]+";<br><br>");}
----
 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();----