LoginSignup
17
11

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-08

はじめに

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

実装例

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_112
    • NetBeans IDE 8.2
  • 動作検証

    • CentOS Linux release 7.2
    • JDK 1.8.0_112

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

17
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11