有効期限の設定

広告

作成したクッキーはデフォルトで有効期限がブラウザが閉じるまでとなっています。ここでは有効期限を変更する方法を見ていきます。

「Cookie」クラスで用意されている"setMaxAge"メソッドで有効期限を設定できます。

Sets the maximum age of the cookie in seconds. 

A positive value indicates that the cookie will expire after that many
seconds have passed. Note that the value is the maximum age when the 
cookie will expire, not the cookie's current age. 

A negative value means that the cookie is not stored persistently and 
will be deleted when the Web browser exits. A zero value causes the 
cookie to be deleted. 

Parameters:
  expiry - an integer specifying the maximum age of the cookie in seconds; 
    if negative, means the cookie is not stored; if zero, deletes the 
    cookie

有効期限は秒数で指定します。例えば1時間に設定したい場合には下記のようにします。

Cookie cookie = new Cookie("visited", "1");
cookie.setMaxAge(3600);

デフォルトで設定されているように引数にマイナスの値を設定した場合、有効期限はブラウザが閉じるまでとなります。

また引数に0を設定するとクッキーを破棄します。

サンプルプログラム

では一度試してみます。

web.xmlファイルは下記のようにしました。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>cookietest</servlet-name>
    <servlet-class>CookieTest3</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>cookietest</servlet-name>
    <url-pattern>/cookietest</url-pattern>
  </servlet-mapping>
</web-app>

プログラムは下記のようになります。有効期限は3分間にしました。

CookieTest3.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class CookieTest3 extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>クッキーテスト</title>");
    out.println("</head>");
    out.println("<body>");

    Cookie cookie[] = request.getCookies();
    Cookie visitedCookie = null;

    if (cookie != null){
      for (int i = 0 ; i < cookie.length ; i++){
        if (cookie[i].getName().equals("visited")){
          visitedCookie = cookie[i];
        }
      }

      if (visitedCookie != null){
        int visited = Integer.parseInt(visitedCookie.getValue()) + 1;

        out.println("<p>");
        out.println(visited);
        out.println("回目の訪問です。</p>");

        visitedCookie.setValue(Integer.toString(visited));
        visitedCookie.setMaxAge(180);
        response.addCookie(visitedCookie);
      }else{
        out.println("<p>初回の訪問です。</p>");

        Cookie newCookie = new Cookie("visited", "1");
        newCookie.setMaxAge(180);
        response.addCookie(newCookie);
      }
    }else{
      out.println("<p>初回の訪問です。</p>");

      Cookie newCookie = new Cookie("visited", "1");
      newCookie.setMaxAge(180);
      response.addCookie(newCookie);
    }

    out.println("<a href=¥"/cookie/cookietest¥">再表示</a>");

    out.println("</body>");
    out.println("</html>");
  }
}

上記をコンパイル後に「d:¥servlet-sample¥cookie¥WEB-INF¥classes¥」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/cookie/cookietest」へアクセスしてみます。

クッキーの再設定

「再表示」をクリックすると訪問回数が増加します。

クッキーの再設定

有効期限を180秒に設定しているため、一度ブラウザを閉じてから再度同じURLを見てみると、クッキーは初期化されず残っています。

クッキーの再設定

有効期限である180秒経過以降に再度ホームページを表示してみるとクッキーが削除されて初期化されて表示されます。

クッキーの再設定

( Written by Tatsuo Ikura )