クッキー
日本語 | クッキー |
英語 | cookie |
ふりがな | くっきー |
フリガナ | クッキー |
Webブラウザに情報を保存できるシステム。
サーバー側からの指示で、情報をクライアント側にファイルとして保存することのできるシステム。
たとえば、Webアプリケーションで「次回から自動的にログインする」とあるのは、ログイン時にユーザー名とパスワードをクッキーに保存し、次回ログイン時はそのクッキーからユーザー名とパスワードを取得するようにする。
クッキーには「名前」と「値」があり、「名前」を付けて「値」を登録する。
「値」は4096バイト以下の文字列とする。また、URL同様記号や日本語の文字列は使用できないためエンコードしてからセットする必要がある。
また、クッキーには「有効期限」を設定することができる。「ユーザー名」等の場合には数日と、比較的長いことが多い。有効期限を過ぎたクッキーは自動的に削除される。
クッキーはWebサイト単位(ドメイン、もしくはIPアドレス単位)で管理されるため、あるWebサイトのWebアプリケーションが、他のWebサイトのWebアプリケーションのクッキーを取得することはできない。
また、クッキーには有効期限を設定できるため、比較的安全とされる。
クッキーはWebブラウザの設定でオフにすることもできる。
セッションIDも、クッキーに保存される。
クッキーの保存方法はWebブラウザによって異なるが、通常はテキストファイルとして保存される。
また、クッキーはWebブラウザ単位で保存される。
そのため、同じユーザーでもWebブラウザが異なるとクッキーも異なる。
また、クッキーは普通のファイルのため、削除されることもある。
そのため、長期間保存する必要のある情報は保存してはいけない。
JavaではCookieクラスでクッキーを管理する。
HttpServletRequestインターフェイスのgetCookies()メソッドでWebサイトに関連づけられたクッキー一覧を取得し、HttpServletResponseインターフェイスのaddCookie()メソッドで追加する。
「クッキー」とは、お菓子の「クッキー」である。
「食べた後に食べかすが残る」というクッキーの特徴に、「食べかす」=「情報」を掛けている。
言い換えると、クッキーに保存する情報は「食べかす」程度にすべきということでもある。
サーバー側からの指示で、情報をクライアント側にファイルとして保存することのできるシステム。
たとえば、Webアプリケーションで「次回から自動的にログインする」とあるのは、ログイン時にユーザー名とパスワードをクッキーに保存し、次回ログイン時はそのクッキーからユーザー名とパスワードを取得するようにする。
クッキーには「名前」と「値」があり、「名前」を付けて「値」を登録する。
「値」は4096バイト以下の文字列とする。また、URL同様記号や日本語の文字列は使用できないためエンコードしてからセットする必要がある。
また、クッキーには「有効期限」を設定することができる。「ユーザー名」等の場合には数日と、比較的長いことが多い。有効期限を過ぎたクッキーは自動的に削除される。
クッキーはWebサイト単位(ドメイン、もしくはIPアドレス単位)で管理されるため、あるWebサイトのWebアプリケーションが、他のWebサイトのWebアプリケーションのクッキーを取得することはできない。
また、クッキーには有効期限を設定できるため、比較的安全とされる。
クッキーはWebブラウザの設定でオフにすることもできる。
セッションIDも、クッキーに保存される。
クッキーの保存方法はWebブラウザによって異なるが、通常はテキストファイルとして保存される。
また、クッキーはWebブラウザ単位で保存される。
そのため、同じユーザーでもWebブラウザが異なるとクッキーも異なる。
また、クッキーは普通のファイルのため、削除されることもある。
そのため、長期間保存する必要のある情報は保存してはいけない。
JavaではCookieクラスでクッキーを管理する。
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分経つと消えてしまいます。 } }