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 オブジェクトで一般的に使用されるメソッドをリストしています:

シリアル番号メソッド & 説明
1public void setDomain(文字列パターン)


Cookie のドメイン名を設定します (例: w3cschool.cc
) 2public String getDomain()


Cookie のドメイン名を取得します (例: w3cschool.cc
) 3public void setMaxAge(int expiry)


Cookie の有効期間を秒単位で設定します。デフォルトの有効期間は現在のセッションの存続時間です
4public int getMaxAge()


Cookie の有効期間を秒単位で取得します。デフォルトは -1 で、ブラウザが閉じるまで Cookie が存続することを示します
5public String getName()


Cookie の名前を返します。
作成後に名前を変更することはできません。 6public void setValue(String newValue)


Cookie の値を設定します
7public String getValue()


Cookie の値を取得します
8public void setPath(String uri)


Cookie のパスを設定します。デフォルトでは、現在のページ ディレクトリ内のすべての URL と、このディレクトリ内のすべてのサブディレクトリになります
9public String getPath()


Cookie へのパスを取得します
10public void setSecure(boolean flag)


Cookie を送信用に暗号化する必要があるかどうかを指定します
11public void setComment(文字列目的)


Cookieの目的を説明するコメントを設定します。注釈は、ブラウザーがユーザーに Cookie を表示するときに非常に役立ちます
12public String getComment()


Cookie の目的を説明するコメントを返します。コメントがない場合は null を返します

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>

ブラウザがアクセスすると、出力結果は次のようになります。

C6A7341F-029A-4244-8B38-BE010E391091.jpg 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>

ブラウザ経由でアクセスすると、出力結果は次のようになります:

C6A7341F-029A-4244-8B38-BE010E391091.jpg

もう一度 http://localhost:8080/testjsp/cookie.jsp にアクセスすると、次の結果が得られます:

7BF1C669-F7A4-4245-B7B0-B79BBB272604.jpg

width="70%" "name" という名前の Cookie が確認できます。なくなってしまった。

ブラウザの Cookie を手動で削除することもできます。 IE ブラウザでは、[ツール] メニュー項目をクリックし、[インターネット オプション] を選択して、[Cookie の削除] をクリックすると、すべての Cookie を削除できます。