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

MyMemoWiki

「Cookie」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Cookie== *http://www.ietf.org/rfc/rfc2109.txt *http://www.studyinghttp.net/cookies *http://www.futomi.com/lecture/cookie/specification.html ====セッション維…」)
 
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
==Cookie==
+
==[[Cookie]]==
 
*http://www.ietf.org/rfc/rfc2109.txt
 
*http://www.ietf.org/rfc/rfc2109.txt
 
*http://www.studyinghttp.net/cookies
 
*http://www.studyinghttp.net/cookies
 
*http://www.futomi.com/lecture/cookie/specification.html
 
*http://www.futomi.com/lecture/cookie/specification.html
  
====セッション維持とCookie====
+
====セッション維持と[[Cookie]]====
*Java Web アプリケーションでは、ブラウザのセッション維持の為に、基本的にCookieを利用する。
+
*Java Web アプリケーションでは、ブラウザのセッション維持の為に、基本的に[[Cookie]]を利用する。
*デフォルトではCookie名は、JSESSIONID
+
*デフォルトでは[[Cookie]]名は、JSESSIONID
*ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下の[4.4 Webコンテナがセッション管理を行う場合、クッキーやURLの書き換え] [メソッドでセッションキーをURLに埋め込む]ことで対応する。
+
*ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下の[[4.4 Webコンテナがセッション管理を行う場合、クッキーやURLの書き換え|メソッドでセッションキーをURLに埋め込む]]ことで対応する。
**HttpServletResponse.encodeRedirectURL(url)
+
**HttpServlet[[R]]esponse.encode[[R]]edirectU[[R]]L(url)
**HttpServletResponse.encodeURLL(url)
+
**HttpServlet[[R]]esponse.encodeU[[R]]LL(url)
 
*フレームワークを利用すると、そのあたりを自動でやってくれることが多い。
 
*フレームワークを利用すると、そのあたりを自動でやってくれることが多い。
**Struts 1.xでは、<html:form><html:rewrite>等に指定したURLは、自動で上記、セッションキーをURLに付加する処理を行ってくれる。
+
**[[Struts]] 1.xでは、&lt;html:form&gt;&lt;html:rewrite&gt;等に指定したURLは、自動で上記、セッションキーをURLに付加する処理を行ってくれる。
 
=====サンプル=====
 
=====サンプル=====
 
サンプルコード
 
サンプルコード
   protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+
   protected void doGet(HttpServlet[[R]]equest req, HttpServlet[[R]]esponse res) throws ServletException, IOException {
 
      
 
      
 
     PrintWriter writer = res.getWriter();
 
     PrintWriter writer = res.getWriter();
26行目: 26行目:
 
       session.setAttribute(key_date, ftime);
 
       session.setAttribute(key_date, ftime);
 
        
 
        
       // CookieがOffの場合の対策 1
+
       // [[Cookie]]がOffの場合の対策 1
       // res.sendRedirect(res. ("/CookieTest/cookie.test"));
+
       // res.sendRedirect(res. ("/[[Cookie]]Test/cookie.test"));
 
       // return;
 
       // return;
 
     }  
 
     }  
 
      
 
      
     buf.append("<html>");
+
     buf.append("&lt;html&gt;");
     buf.append("<head>");
+
     buf.append("&lt;head&gt;");
     buf.append("</head>");
+
     buf.append("&lt;/head&gt;");
     buf.append("<body>");
+
     buf.append("&lt;body&gt;");
     buf.append("<a href='/CookieTest/cookie.test'>reload</a>");
+
     buf.append("&lt;a href='/[[Cookie]]Test/cookie.test'&gt;reload&lt;/a&gt;");
 
   
 
   
     // CookieがOffの場合の対策 2
+
     // [[Cookie]]がOffの場合の対策 2
     // buf.append("<a href='"+  res.encodeURL("/CookieTest/cookie.test") + "'>reload</a><br>");
+
     // buf.append("&lt;a href='"+  res.encodeURL("/[[Cookie]]Test/cookie.test") + "'&gt;reload&lt;/a&gt;&lt;br&gt;");
     buf.append("first access time : " + ftime + "<br>");
+
     buf.append("first access time : " + ftime + "&lt;br&gt;");
     buf.append("</body>");
+
     buf.append("&lt;/body&gt;");
     buf.append("</html>");
+
     buf.append("&lt;/html&gt;");
 
      
 
      
 
     writer.write(buf.toString());
 
     writer.write(buf.toString());
51行目: 51行目:
 
[[File:0316_cook00.jpg]]
 
[[File:0316_cook00.jpg]]
  
*セッションを利用する単純なアプリケーションを動かすと、以下のようなCookieが利用される。
+
*セッションを利用する単純なアプリケーションを動かすと、以下のような[[Cookie]]が利用される。
  
*IE
+
*[[IE]]
[ブラウザ用デバッグツール] [Developer Toolbar]で確認
+
[[ブラウザ用デバッグツール|Developer Toolbar]]で確認
 
[[File:0317_cook01.jpg]]
 
[[File:0317_cook01.jpg]]
 
*Firefox
 
*Firefox
 
[[File:0318_cook02.jpg]]
 
[[File:0318_cook02.jpg]]
 
*Telnet
 
*Telnet
  >telnet localhost 8080
+
  &gt;telnet localhost 8080
  GET http://localhost:8080/CookieTest/cookie.test HTTP/1.1
+
  GET http://localhost:8080/[[Cookie]]Test/cookie.test HTTP/1.1
 
   
 
   
 
   
 
   
  HTTP/1.1 200 OK
+
  [[HTTP]]/1.1 200 OK
  Server: Apache-Coyote/1.1
+
  Server: [[Apache]]-Coyote/1.1
  Set-Cookie: my_name=yagi; Expires=Tue, 04-Mar-2008 01:09:34 GMT
+
  Set-[[Cookie]]: my_name=yagi; Expires=Tue, 04-Mar-2008 01:09:34 GMT
  Set-Cookie: JSESSIONID=9A5DE963413D4C8CC0B5A8C78A7E1BCE; Path=/CookieTest
+
  Set-[[Cookie]]: JSESSIONID=9A5DE963413D4C8CC0B5A8C78A7E1BCE; Path=/[[Cookie]]Test
 
  Transfer-Encoding: chunked
 
  Transfer-Encoding: chunked
 
  Date: Tue, 04 Mar 2008 01:03:34 GMT
 
  Date: Tue, 04 Mar 2008 01:03:34 GMT
 
   
 
   
 
  b7
 
  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>
+
  &lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;a href='/[[Cookie]]Test/cookie.test;jsessionid=9A5DE963413D4C8CC0B5A8C78A7E1BCE'&gt;reload&lt;/a&gt;&lt;br&gt;first access time : Tue Mar 04 10:03:34 JST 2008&lt;br&gt;&lt;/body&gt;&lt;/html&gt;
 
  0
 
  0
  
====明示的にCookieを利用====
+
====明示的に[[Cookie]]を利用====
  Cookie cookie = new Cookie("my_name", "yagi");
+
  [[Cookie]] cookie = new [[Cookie]]("my_name", "yagi");
 
  cookie.setMaxAge(360);
 
  cookie.setMaxAge(360);
  res.addCookie(cookie);
+
  res.add[[Cookie]](cookie);
*IE
+
*[[IE]]
 
[[File:0319_cook03.jpg]]
 
[[File:0319_cook03.jpg]]
 
*Firefox
 
*Firefox
84行目: 84行目:
  
  
====JavaScript====
+
====[[JavaScript]]====
 
=====参照=====
 
=====参照=====
 
  document.cookie
 
  document.cookie
=====Bookmarklet=====
+
=====[[Bookmarklet]]=====
Cookieを表示
+
[[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();----
+
  javascript:c=document.cookie;w=open('_blank');cs=c.split(";");for(i=0;i&lt;5;i++){w.document.write(cs[i]+";&lt;br&gt;&lt;br&gt;");}w.document.close();----

2020年2月16日 (日) 04:23時点における最新版

Cookie

セッション維持とCookie

  • Java Web アプリケーションでは、ブラウザのセッション維持の為に、基本的にCookieを利用する。
  • デフォルトではCookie名は、JSESSIONID
  • ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下のメソッドでセッションキーを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();
 }

実行 0316 cook00.jpg

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

Developer Toolbarで確認 0317 cook01.jpg

  • Firefox

0318 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);

0319 cook03.jpg

  • Firefox

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