JSP クッキーの処理
Cookie はクライアント コンピューターに保存されるテキスト ファイルであり、大量の軌跡情報が保存されます。サーブレット テクノロジに基づいて、JSP は明らかに HTTP Cookie のサポートを提供できます。
リピーター顧客を特定するには通常 3 つのステップがあります:
サーバー スクリプトは一連の Cookie をブラウザに送信します。名前、年齢、ID番号など
ブラウザは、必要に応じてこの情報をコンピュータ上にローカルに保存します。
次回ブラウザがサーバーにリクエストを送信するときに、これらの Cookie 情報もサーバーに送信され、サーバーはこの情報を使用してユーザーを識別したり、他のことを行ったりします。
この章では、Cookie の設定またはリセット方法、Cookie へのアクセス方法、削除方法について説明します。
JSP Cookie の処理には中国語のエンコードとデコードが必要です。方法は次のとおりです:
String str = java.net.URLEncoder.encode("中文"); //编码 String str = java.net.URLDecoder.decode("编码后的字符串"); // 解码
Cookie の構造
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=php; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=php.cn 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 スクリプトは、リクエスト オブジェクトの getCookies() メソッドを通じてこれらの Cookie にアクセスし、Cookie オブジェクトの配列を返します。
サーブレット Cookie メソッド
次の表は、Cookie オブジェクトで一般的に使用されるメソッドをリストしています:
シリアル番号 | メソッド & 説明 |
---|---|
1 | public void setDomain(文字列パターン) |
) 2 | public String getDomain() |
) 3 | public void setMaxAge(int expiry) |
4 | public int getMaxAge() |
5 | public String getName() |
作成後に名前を変更することはできません。 6 | public void setValue(String newValue) |
7 | public String getValue() |
8 | public void setPath(String uri) |
9 | public String getPath() |
10 | public void setSecure(boolean flag) |
11 | public void setComment(文字列目的) |
12 | public String getComment() |
JSP を使用して Cookie を設定する
JSP を使用して Cookie を設定するには、次の 3 つの手順が必要です:
(1) Cookie オブジェクトを作成します: Cookie の名前と値 (両方とも文字列) をパラメーターとして使用して、Cookie コンストラクターを呼び出します。
Cookie cookie = new Cookie("key","value");
名前にも値にもスペースや次の文字を含めることはできないことに注意してください:
[ ] ( ) = , " / ? @ : ;
(2) 有効期間を設定します: setMaxAge() 関数を呼び出して、Cookie の有効期間 (秒単位) を示します。有効 。次の操作では、有効期間を 24 時間に設定します。
cookie.setMaxAge(60*60*24);
(3) HTTP 応答ヘッダーに Cookie を送信します: 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>网址:</b> <%= request.getParameter("url")%> </p></li> </ul> </body> </html>
以下は、GET メソッドを通じてクライアント データを main.jsp ファイルに送信し、Cookie を設定する単純な HTML フォームです:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <form action="main.jsp" method=GET> 站点名: <input type="text" name="name"> <br /> 网址: <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 ファイルに送信します。デモの Gif 画像は次のとおりです:
「サイト名」と「」を入力してみてください。 「ウェブサイトのアドレス」を入力して送信ボタンをクリックすると、画面に「サイト名」と「ウェブアドレス」が表示され、「サイト名」と「ウェブアドレス」に2つのCookieが設定されます。
JSP を使用して Cookie を読み取る
Cookie を読み取るには、request.getCookies() メソッドを呼び出して javax.servlet.http.Cookie オブジェクトの配列を取得し、配列を反復処理して getName() を使用する必要があります。メソッドと getValue() メソッドを使用して、各 Cookie の名前と値を取得します。
<h3 の例のデモ< h3="">前の例の 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>"); } }else{ out.println("<h2>没有发现 Cookie</h2>"); } %> </body> </html>
ブラウザがアクセスすると、出力結果は次のようになります。
JSP を使用した Cookie の削除
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>");
}
}else{
out.println("<h2>没有发现 Cookie</h2>");
}
%>
</body>
</html>
ブラウザ経由でアクセスすると、出力結果は次のようになります: もう一度 http://localhost:8080/testjsp/cookie.jsp にアクセスすると、次の結果が得られます:
width="70%" "name" という名前の Cookie が確認できます。なくなってしまった。
ブラウザの Cookie を手動で削除することもできます。 IE ブラウザでは、[ツール] メニュー項目をクリックし、[インターネット オプション] を選択して、[Cookie の削除] をクリックすると、すべての Cookie を削除できます。