Java

Java Cookieのセット・取得、Secure属性

はじめに

事前に準備する外部ライブラリ等はありません。

実装例

Cookieを管理するクラスを定義します。

CookieTest.java

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author tool-taro.com
 */
public class CookieTest {

	public static String getCookie(HttpServletRequest request, String name) {
		String result = null;

		Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				if (name.equals(cookie.getName())) {
					result = cookie.getValue();
					break;
				}
			}
		}

		return result;
	}

	public static void setCookie(HttpServletRequest request, HttpServletResponse response, String path, String name, String value, int maxAge) {
		Cookie cookie = new Cookie(name, value);
		cookie.setMaxAge(maxAge);
		cookie.setPath(path);
		//httpsで稼働している環境であればCookieが暗号化されるようSecure属性をつける
		if ("https".equals(request.getScheme())) {
			cookie.setSecure(true);
		}
		response.addCookie(cookie);
	}
}

Cookie管理機構の準備が終わりました。
サンプルでは、動作確認しやすいようにjspで実装しています。

cookie_test.jsp

<%-- 
    Author     : tool-taro.com
--%>

<%@page import="CookieTest"%>
<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<%
        //Cookieから"test_cookie_name"というKeyで登録された値(文字列)を取り出す
        String value = CookieTest.getCookie(request, "test_cookie_name");

        //valueがnullの場合のみCookieをセットする(期限は5分)
        if (value == null) {
                CookieTest.setCookie(request, response, "/", "test_cookie_name", "test_cookie_value", 5 * 60);
        }
%>
<!DOCTYPE html>
<html>
    <head>
        <title>tool-taro.com</title>
    </head>
    <body>
        取得した値="<%= value%>"<br>
    </body>
</html>

動作確認

cookie_test.jspの実行結果を見てみましょう。

取得した値="null"

想定通りの結果を得られました。
2回目のアクセスでは次のような結果となります。

取得した値="test_cookie_value"

想定通りの結果を得られました。

ブラウザでCookieが管理されている状況を確認します。
パスや有効期限が指定通り管理されています。
また、httpsでアクセスされた場合に限り”Secure”属性を指定していますので、
クライアント(ブラウザ)からのCookie送信の扱いについて違いが出ます。

http
無題.png

https
無題.png

環境

  • 開発
    • Windows 10 Pro
    • JDK 1.8.0_74
    • NetBeans IDE 8.1
  • 動作検証
    • CentOS Linux release 7.2
    • JDK 1.8.0_74

Webツールも公開しています。
Web便利ツール@ツールタロウ

スポンサーリンク