English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
cookieはクライアントマシンに保存されるテキストファイルで、多くのトラッキング情報を保存しています。Servlet技術の上に立って、JSPは明らかにHTTPcookieのサポートを提供できます。
通常、顧客を識別するためには3つのステップが必要です:
サーバースクリプトは、名前、年齢、ID番号など、一連のcookieをブラウザに送信します。
ブラウザはこれらの情報をローカルマシンに保存し、必要に応じて使用します。
次回、ブラウザがサーバーにリクエストを送信するたびに、これらのcookie情報も同時にサーバーに送信され、サーバーはこれらの情報を使用してユーザーを識別したり他の処理を行います。
本節では、cookie の設定やリセット方法、アクセス方法、削除方法について説明します。
JSP Cookie 処理において、中国語のエンコードとデコードが必要です。以下の方法で行います:
String str = java.net.URLEncoder.encode("中国語", "UTF"-8); //エンコード String str = java.net.URLDecoder.decode("エンコードされた文字列","UTF"-8); // 解読
cookieは通常HTTPヘッダーで設定されます(JavaScriptがブラウザで直接cookieを設定できる場合もあります)。JSPでは、cookieを設定するためにサーバーに以下のようなヘッダー情報を送信する必要があります:
HTTP/1.1 200 OK Date: Fri, 04 Feb 2015 21:03:38 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=w3codebox; expires=Friday, 04-Feb-17 22:03:38 GMT; path=/; domain=oldtoolbag.com Connection: close Content-Type: text/html
ご覧の通り、Set-Cookieヘッダーにはキーワードと値のペア、GMT(グリニッジ標準時間)、パス、ドメインが含まれています。キーワードと値のペアはURLエンコードされます。有効期限はインストラクションであり、ブラウザがcookieをクリアできる時間を指示します。
ブラウザがcookieを保存できるように設定されている場合、ブラウザは期限までその情報を保存します。ユーザーがアクセスするページがcookieのパスとドメインと一致する場合、ブラウザはそのcookieをサーバーに再送信します。ブラウザ側のヘッダーは以下のようになります:
GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc) Host: zink.demon.co.uk:1126 Accept: image/gif, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Cookie: name=xyz
JSPスクリプトはrequestオブジェクトのgetCookies()メソッドを通じてこれらのcookieにアクセスし、このメソッドはCookieオブジェクトの配列を返します。
以下にCookieオブジェクトでよく使用されるメソッドの一覧を示します:
番号 | メソッド & 説明 |
---|---|
1 | public void setDomain(String pattern) cookieのドメインを設定します、例えばoldtoolbag.com |
2 | public String getDomain() cookieのドメインを取得します、例えばoldtoolbag.com |
3 | public void setMaxAge(int expiry) cookieの有効期限を設定します。秒単位で、デフォルトの有効期限は現在のセッションの生存時間です。 |
4 | public int getMaxAge() cookieの有効期限を取得します。秒単位で、デフォルトは-1 、cookieはブラウザの閉じるまで生き続けます。 |
5 | public String getName() cookieの名前を返します。名前が作成されると、それ以降は変更できません。 |
6 | public void setValue(String newValue) cookieの値を設定します。 |
7 | public String getValue() cookieの値を取得します。 |
8 | public void setPath(String uri) cookieのパスを設定します。デフォルトでは、現在のページディレクトリのすべてのURLとそのサブディレクトリが含まれます。 |
9 | public String getPath() cookieのパスを取得します。 |
10 | public void setSecure(boolean flag) cookieが暗号化されたトランスポートを必要とするかどうかを示します。 |
11 | public void setComment(String purpose) cookieの目的を説明するコメントを設定します。ブラウザが cookie をユーザーに表示する際に、コメントは非常に有用になります。 |
12 | public String getComment() cookieの目的を説明するコメントを返します。コメントがない場合は null を返します。 |
JSPを使用してcookieを設定する手順は以下の3ステップです:
(1) cookie オブジェクトの作成: cookie の構造関数を呼び出して、cookie 名と値を引数として使用します。これらはすべて文字列です。
Cookie cookie = new Cookie("key","value");
名前と値には必ずしもスペースや以下の文字を含めないでください:
[ ] ( ) = , " / ? @ : ;
(2) 有効期限の設定:setMaxAge() 函数を呼び出して cookie がどれくらいの時間(秒単位)有効であることを示します。以下の操作では有効期限を設定しました: 24 時間。
cookie.setMaxAge(60*60*24);
(3cookie を HTTP レスポンスヘッダーに送信します:response.addCookie() 函数を呼び出して HTTP レスポンスヘッダーに cookie を追加します。
response.addCookie(cookie);
main.jsp ファイルのコードは以下の通りです:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net."*" %> <% // エンコード、中文の乱码を解決 String str = URLEncoder.encode(request.getParameter("name"),"utf-8); // nameとurl cookieを設定 Cookie name = new Cookie("name", str); Cookie url = new Cookie("url", request.getParameter("url")); // cookieの有効期限を設定24時間。 name.setMaxAge(60*60*24); url.setMaxAge(60*60*24); // 応答ヘッダーにcookieを追加 response.addCookie(name); response.addCookie(url); %> <html> <head> <title>Cookieを設定</title> </head> <body> <h1>Cookieを設定</h1> <ul> <li><p><b>ウェブサイト名:</b> <%= request.getParameter("name") %> </p></li> <li><p><b>URL:</b> <%= request.getParameter("url") %> </p></li> </ul> </body> </html>
以下は、GETメソッドを使用してクライアントデータをmain.jspファイルに送信し、cookieを設定する簡単なHTMLフォームです:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>基本チュートリアルウェブ(oldtoolbag.com)</title> </head> <body> <form action="main.jsp" method=GET> サイト名: <input type="text" name="name"> <br /> URL: <input type="text" name="url" /> <input type="submit" value="送信" /> </form> </body> </html>
上記のHTMLコードを test.htm ファイルに保存します。
このファイルを現在のjspプロジェクトのWebContentディレクトリに配置します(main.jspと同じディレクトリ)。
http: にアクセスして、//localhost:8080/testjsp/test.html ファイルが以下のように main.jsp ファイルにフォームデータを送信します:
「サイト名」および「URL」を入力し、送信ボタンをクリックすると、画面に「サイト名」および「URL」が表示され、「サイト名」および「URL」の2つのcookieが設定されます。
cookieを読み取るには、request.getCookies()メソッドを呼び出してjavax.servlet.http.Cookieオブジェクトの配列を取得し、その配列を巡回してgetName()メソッドとgetValue()メソッドを使用して各cookieの名前と値を取得する必要があります。
前の例で使用したcookieを読み取ります。以下はcookie.jspファイルのコードです:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net."*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookieを取得</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // cookiesのデータを取得します。これは配列です。 cookies = request.getCookies(); if( cookies != null ){ out.println("<h2> 検索 Cookie 名と値</h2); for (int i = 0; i < cookies.length; i++{ cookie = cookies[i]; out.print("パラメータ名 : " + cookie.getName()); out.print("<br> out.print("パラメータ値: " + URLDecoder.decode(cookie.getValue(), "utf-8) +" <br>" out.print("------------------------------------<br> } } out.println("<h2没有发现 Cookie</h2); } %> </body> </html>
ブラウザでアクセス後、出力結果は以下の通りです:
cookieを削除するのは非常に簡単です。cookieを削除する場合は、以下の手順に従ってください:
既存のcookieを取得し、Cookieオブジェクトに保存します。
cookieの有効期限を0に設定します。
このcookieをリスポンスヘッダーに再追加します。
以下のプログラムは、名前が "name" のcookieを削除します。cookie.jspを2度目に実行すると、nameがnullになります。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net."*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookieを取得</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // 現在のドメイン下のcookiesを取得します。これは配列です。 cookies = request.getCookies(); if( cookies != null ){ out.println("<h2> 検索 Cookie 名と値</h2); for (int i = 0; i < cookies.length; i++{ cookie = cookies[i]; if((cookie.getName( )).compareTo("name") == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print("削除 Cookie: " + cookie.getName( ) + "<br/); } out.print("パラメータ名 : " + cookie.getName()); out.print("<br> out.print("パラメータ値: " + URLDecoder.decode(cookie.getValue(), "utf-8) +" <br>" out.print("------------------------------------<br> } } out.println("<h2没有发现 Cookie</h2); } %> </body> </html>
ブラウザでアクセスすると、以下のような出力が得られます:
http: に再度アクセスします://localhost:8080/testjsp/cookie.jsp、以下のような結果が得られます:
名前が「name」のcookieが消えたことが確認できます。
ブラウザで手動でcookieを削除することもできます。IEブラウザでは、ツールメニューをクリックして、インターネットオプションを選択し、cookieを削除するをクリックすると、すべてのcookieが削除されます。