Cookie
| 日本語 | クッキー |
| 英語 | cookie |
| ふりがな | くっきー |
| フリガナ | クッキー |
クッキーを管理するクラス。
J2EEに含まれるクラスのひとつ。パッケージも含めたクラス名はjavax.servlet.http.Cookie。
クッキーは「辞書」構造を持ち、「名前」で「値」を登録する形となる。
コンストラクタの第1引数で「名前」、第2引数で「値」を指定して作成する。
この「値」は、URLと同じく記号や日本語を使用できないため、URLEncoderクラス及びURLDecoderクラスを用いて「%xx」形式に変換してからセットする。
ただし、この「値」は最大4096バイトしか格納できない。「あ」を、UTF-8で「%xx」形式にエンコードすると「%E3%81%82%」となる。つまり「見た目1文字」が「9バイト」になるため、長文は保存できない。
クッキーの有効期限はsetMaxAge()メソッドでセットする。
単位は「秒」である。
HttpServletRequestインターフェイスのgetCookies()メソッドでWebサイトに関連づけられたクッキー一覧を取得することができる。クッキーは辞書構造だが、「名前」で任意のクッキーを取得するメソッドはないため注意。
HttpServletResponseインターフェイスのaddCookie()メソッドで追加することができる。その際、同じ「名前」のクッキーは上書きされる。
J2EEに含まれるクラスのひとつ。パッケージも含めたクラス名はjavax.servlet.http.Cookie。
クッキーは「辞書」構造を持ち、「名前」で「値」を登録する形となる。
コンストラクタの第1引数で「名前」、第2引数で「値」を指定して作成する。
この「値」は、URLと同じく記号や日本語を使用できないため、URLEncoderクラス及びURLDecoderクラスを用いて「%xx」形式に変換してからセットする。
ただし、この「値」は最大4096バイトしか格納できない。「あ」を、UTF-8で「%xx」形式にエンコードすると「%E3%81%82%」となる。つまり「見た目1文字」が「9バイト」になるため、長文は保存できない。
クッキーの有効期限はsetMaxAge()メソッドでセットする。
単位は「秒」である。
HttpServletRequestインターフェイスのgetCookies()メソッドでWebサイトに関連づけられたクッキー一覧を取得することができる。クッキーは辞書構造だが、「名前」で任意のクッキーを取得するメソッドはないため注意。
HttpServletResponseインターフェイスのaddCookie()メソッドで追加することができる。その際、同じ「名前」のクッキーは上書きされる。
参考サイト
// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
/**
* リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
*/
public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
{
// Content-Typeをセット。
response.setContentType( "text/html;charset=Windows-31J" );
// クッキーの名前。
final String NAME = "name";
// クッキーの「値」。
String value = "";
// クッキーの「値」(「%xx」)。
String encodedValue = "";
// クッキーの配列を取得します。
Cookie cookies[] = request.getCookies();
// 配列の中から、「名前」が"name"のものを探します。
if( cookies != null )
{
for( int iF1 = 0; iF1 < cookies.length; ++iF1 )
{
if( cookies[iF1].getName().equals( NAME ) )
{
// 見つかったので「値」を取っておきます。
encodedValue = cookies[iF1].getValue();
}
}
}
// クッキーの「値」は「%xx」形式の文字列と決まっているので、
// 変換して、そのあと文字列を追加して、再度変換します。
try
{
// 「%xx」→「テスト」
value = URLDecoder.decode( encodedValue, "UTF-8" );
// 追記します。
value += "/テスト";
// 「%xx」←「テスト」
encodedValue = URLEncoder.encode( value, "UTF-8" );
}
catch( UnsupportedEncodingException e )
{
// encode()メソッドの第2引数に渡した文字コードが、Javaの
// サポートしていない文字コードの場合にはこの
// UnsupportedEncodingException例外が投げられます。
e.printStackTrace();
}
// Cookieクラスを作成します。
// コンストラクタには名前と値を渡します。
Cookie cookie = new Cookie( NAME, encodedValue );
// クッキーの「有効期限」を60秒にします。
cookie.setMaxAge( 60 );
// クッキーを追加します。同じ名前のものがあれば上書きになります。
response.addCookie( cookie );
// HTML出力用のPrintWriterを取得します。
PrintWriter out = response.getWriter();
// HTMLを出力します。
out.println( "<HTML>" );
out.println( "<HEAD>" );
out.println( "<TITLE>サーブレットのテスト</TITLE>" );
out.println( "</HEAD>" );
out.println( "<BODY>" );
out.println( value );
out.println( "</BODY>" );
out.println( "</HTML>" );
// /テスト/テスト/テスト
// ……と、リロードするたびに増えていきます。
// でも、有効期限切れで1分経つと消えてしまいます。
}
}
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
/**
* リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
*/
public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
{
// Content-Typeをセット。
response.setContentType( "text/html;charset=Windows-31J" );
// クッキーの名前。
final String NAME = "name";
// クッキーの「値」。
String value = "";
// クッキーの「値」(「%xx」)。
String encodedValue = "";
// クッキーの配列を取得します。
Cookie cookies[] = request.getCookies();
// 配列の中から、「名前」が"name"のものを探します。
if( cookies != null )
{
for( int iF1 = 0; iF1 < cookies.length; ++iF1 )
{
if( cookies[iF1].getName().equals( NAME ) )
{
// 見つかったので「値」を取っておきます。
encodedValue = cookies[iF1].getValue();
}
}
}
// クッキーの「値」は「%xx」形式の文字列と決まっているので、
// 変換して、そのあと文字列を追加して、再度変換します。
try
{
// 「%xx」→「テスト」
value = URLDecoder.decode( encodedValue, "UTF-8" );
// 追記します。
value += "/テスト";
// 「%xx」←「テスト」
encodedValue = URLEncoder.encode( value, "UTF-8" );
}
catch( UnsupportedEncodingException e )
{
// encode()メソッドの第2引数に渡した文字コードが、Javaの
// サポートしていない文字コードの場合にはこの
// UnsupportedEncodingException例外が投げられます。
e.printStackTrace();
}
// Cookieクラスを作成します。
// コンストラクタには名前と値を渡します。
Cookie cookie = new Cookie( NAME, encodedValue );
// クッキーの「有効期限」を60秒にします。
cookie.setMaxAge( 60 );
// クッキーを追加します。同じ名前のものがあれば上書きになります。
response.addCookie( cookie );
// HTML出力用のPrintWriterを取得します。
PrintWriter out = response.getWriter();
// HTMLを出力します。
out.println( "<HTML>" );
out.println( "<HEAD>" );
out.println( "<TITLE>サーブレットのテスト</TITLE>" );
out.println( "</HEAD>" );
out.println( "<BODY>" );
out.println( value );
out.println( "</BODY>" );
out.println( "</HTML>" );
// /テスト/テスト/テスト
// ……と、リロードするたびに増えていきます。
// でも、有効期限切れで1分経つと消えてしまいます。
}
}
// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
/**
* リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
*/
public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
{
// Content-Typeをセット。
response.setContentType( "text/html;charset=Windows-31J" );
// クッキーの名前。
final String NAME = "name";
// クッキーの「値」。
String value = "";
// クッキーの「値」(「%xx」)。
String encodedValue = "";
// クッキーの配列を取得します。
Cookie cookies[] = request.getCookies();
// 配列の中から、「名前」が"name"のものを探します。
if( cookies != null )
{
for( int iF1 = 0; iF1 < cookies.length; ++iF1 )
{
if( cookies[iF1].getName().equals( NAME ) )
{
// 見つかったので「値」を取っておきます。
encodedValue = cookies[iF1].getValue();
}
}
}
// クッキーの「値」は「%xx」形式の文字列と決まっているので、
// 変換して、そのあと文字列を追加して、再度変換します。
try
{
// 「%xx」→「テスト」
value = URLDecoder.decode( encodedValue, "UTF-8" );
// 追記します。
value += "/テスト";
// 「%xx」←「テスト」
encodedValue = URLEncoder.encode( value, "UTF-8" );
}
catch( UnsupportedEncodingException e )
{
// encode()メソッドの第2引数に渡した文字コードが、Javaの
// サポートしていない文字コードの場合にはこの
// UnsupportedEncodingException例外が投げられます。
e.printStackTrace();
}
// Cookieクラスを作成します。
// コンストラクタには名前と値を渡します。
Cookie cookie = new Cookie( NAME, encodedValue );
// クッキーの「有効期限」を60秒にします。
cookie.setMaxAge( 60 );
// クッキーを追加します。同じ名前のものがあれば上書きになります。
response.addCookie( cookie );
// HTML出力用のPrintWriterを取得します。
PrintWriter out = response.getWriter();
// HTMLを出力します。
out.println( "<HTML>" );
out.println( "<HEAD>" );
out.println( "<TITLE>サーブレットのテスト</TITLE>" );
out.println( "</HEAD>" );
out.println( "<BODY>" );
out.println( value );
out.println( "</BODY>" );
out.println( "</HTML>" );
// /テスト/テスト/テスト
// ……と、リロードするたびに増えていきます。
// でも、有効期限切れで1分経つと消えてしまいます。
}
}




