プログラミンGOO

プログラミングナレッジ、ワードプレス、広告収入等について、気づき・備忘録を残していきます。

JavaのHttpCookieで、Expires属性を設定する方法は?

Expires属性を直接設定するための専用メソッドはありません。ただし、HttpCookieでは代わりにMax-Age属性を使用してクッキーの有効期限を制御することができます。

Max-Age属性とExpiresが両方とも設定されていた場合、Max-Age属性が優先されるため、有効期限を指定したい場合は、Max-Age属性を使用します。

 

Expires属性とMax-Age属性の違い

  1. Expires属性: クッキーが有効である期限を特定の日付(タイムスタンプ形式)で指定します。
  • 例: Expires=Tue, 01 Jan 2030 12:00:00 GMT
  1. Max-Age属性: クッキーの有効期間を「秒数」で指定します(現在から何秒後にクッキーが無効になるか)。
  • 例: Max-Age=3600(1時間後に有効期限が切れる)

 

Max-Ageが優先される仕様になっているため、HttpCookieではExpiresの代わりにMax-Ageを設定する方法が一般的です。

 

Javaでの設定方法

 

HttpCookieで有効期限を設定するには、setMaxAgeメソッドを使用します。

 

サンプルコード

 

 

import java.net.HttpCookie;

 

public class CookieExample {

    public static void main(String[] args) {

        // クッキーを作成

        HttpCookie cookie = new HttpCookie("myCookie""cookieValue");

        

        // Max-Ageを設定(例: 3600秒 = 1時間)

        cookie.setMaxAge(3600);

 

        // ドメインやパスも設定可能

        cookie.setDomain("example.com");

        cookie.setPath("/");

 

        // クッキー情報を表示

        System.out.println("Cookie: " + cookie);

    }

}

 

このコードでは、クッキーの有効期限が現在から一時間後に設定されています。

 

Expires属性を設定する場合

 

HttpCookieクラスでは直接Expiresを設定する方法がありません。ただし、以下の方法でHTTPレスポンスヘッダにExpiresを追加することで、手動で設定できます。

 

手動でレスポンスヘッダに追加

 

サーブレットを使用してレスポンスヘッダに直接Expiresを含める方法です。

 

 

import javax.servlet.http.*;

 

public class CookieWithExpiresExample extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) {

        Cookie cookie = new Cookie("myCookie""cookieValue");

        

        // Max-Ageで有効期限を設定

        cookie.setMaxAge(3600); // 1時間後

        

        // クッキーをレスポンスに追加

        response.addCookie(cookie);

 

        // Expiresヘッダを手動で追加

        response.setHeader("Set-Cookie"

            "myCookie=cookieValue; Expires=Tue, 01 Jan 2030 12:00:00 GMT; Path=/");

    }

}

 

この方法では、レスポンスヘッダに手動でExpiresを含む完全なSet-Cookieヘッダを記述することで対応できます。

 

まとめ

  • JavaのHttpCookieクラスでは、ExpiresではなくMax-Ageを使用するのが基本です。
  • どうしてもExpiresを設定したい場合は、サーブレットやレスポンスヘッダをカスタマイズすることで対応可能です。

 

参考:

HTTP Cookie の使用 - HTTP | MDN