「Cookie」の版間の差分
ナビゲーションに移動
検索に移動
(同じ利用者による、間の2版が非表示) | |||
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]]==== |
− | *Java Web | + | *Java Web アプリケーションでは、ブラウザのセッション維持の為に、基本的に[[Cookie]]を利用する。 |
− | * | + | *デフォルトでは[[Cookie]]名は、JSESSIONID |
− | *ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下の[4.4 Webコンテナがセッション管理を行う場合、クッキーやURLの書き換え] | + | *ブラウザのCookie がOffの場合は、そのままでは、セッション維持されないので、以下の[[4.4 Webコンテナがセッション管理を行う場合、クッキーやURLの書き換え|メソッドでセッションキーをURLに埋め込む]]ことで対応する。 |
− | ** | + | **HttpServlet[[R]]esponse.encode[[R]]edirectU[[R]]L(url) |
− | ** | + | **HttpServlet[[R]]esponse.encodeU[[R]]LL(url) |
*フレームワークを利用すると、そのあたりを自動でやってくれることが多い。 | *フレームワークを利用すると、そのあたりを自動でやってくれることが多い。 | ||
− | **Struts 1.xでは、<html:form>や<html:rewrite>等に指定したURLは、自動で上記、セッションキーをURLに付加する処理を行ってくれる。 | + | **[[Struts]] 1.xでは、<html:form>や<html:rewrite>等に指定したURLは、自動で上記、セッションキーをURLに付加する処理を行ってくれる。 |
=====サンプル===== | =====サンプル===== | ||
サンプルコード | サンプルコード | ||
− | protected void doGet( | + | 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 |
− | // res.sendRedirect(res. ("/ | + | // res.sendRedirect(res. ("/[[Cookie]]Test/cookie.test")); |
// return; | // return; | ||
} | } | ||
35行目: | 35行目: | ||
buf.append("</head>"); | buf.append("</head>"); | ||
buf.append("<body>"); | buf.append("<body>"); | ||
− | buf.append("<a href='/ | + | buf.append("<a href='/[[Cookie]]Test/cookie.test'>reload</a>"); |
− | // | + | // [[Cookie]]がOffの場合の対策 2 |
− | // buf.append("<a href='"+ res.encodeURL("/ | + | // buf.append("<a href='"+ res.encodeURL("/[[Cookie]]Test/cookie.test") + "'>reload</a><br>"); |
buf.append("first access time : " + ftime + "<br>"); | buf.append("first access time : " + ftime + "<br>"); | ||
buf.append("</body>"); | buf.append("</body>"); | ||
51行目: | 51行目: | ||
[[File:0316_cook00.jpg]] | [[File:0316_cook00.jpg]] | ||
− | * | + | *セッションを利用する単純なアプリケーションを動かすと、以下のような[[Cookie]]が利用される。 |
− | * | + | *[[IE]] |
− | [[ | + | [[ブラウザ用デバッグツール|Developer Toolbar]]で確認 |
[[File:0317_cook01.jpg]] | [[File:0317_cook01.jpg]] | ||
*Firefox | *Firefox | ||
60行目: | 60行目: | ||
*Telnet | *Telnet | ||
>telnet localhost 8080 | >telnet localhost 8080 | ||
− | GET http://localhost:8080/ | + | 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=/ | + | 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='/ | + | <html><head></head><body><a href='/[[Cookie]]Test/cookie.test;jsessionid=9A5DE963413D4C8CC0B5A8C78A7E1BCE'>reload</a><br>first access time : Tue Mar 04 10:03:34 JST 2008<br></body></html> |
0 | 0 | ||
− | ==== | + | ====明示的に[[Cookie]]を利用==== |
− | Cookie cookie = new Cookie("my_name", "yagi"); | + | [[Cookie]] cookie = new [[Cookie]]("my_name", "yagi"); |
cookie.setMaxAge(360); | cookie.setMaxAge(360); | ||
− | res. | + | 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]]を表示 | |
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<5;i++){w.document.write(cs[i]+";<br><br>");}w.document.close();---- |
2020年2月16日 (日) 04:23時点における最新版
目次
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に埋め込むことで対応する。
- フレームワークを利用すると、そのあたりを自動でやってくれることが多い。
- 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が利用される。
- 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();----
© 2006 矢木浩人