JavaA2Z

KAB-studio > プログラミング > JavaA2Z > Cookieとは

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()メソッドで追加することができる。その際、同じ「名前」のクッキーは上書きされる。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// 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 )
        {
            forint 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分経つと消えてしまいます。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/10/22
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。