- Home ›
- サーブレット/JSP入門 ›
- クッキーの利用 ›
- HERE
有効期限の設定
作成したクッキーはデフォルトで有効期限がブラウザが閉じるまでとなっています。ここでは有効期限を変更する方法を見ていきます。
「Cookie」クラスで用意されている"setMaxAge"メソッドで有効期限を設定できます。
setMaxAge public void setMaxAge(int expiry)
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分間にしました。
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 )