はじめに
事前に準備する外部ライブラリ等はありません。
実装例
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送信の扱いについて違いが出ます。
環境
-
開発
- Windows 10 Pro
- JDK 1.8.0_112
- NetBeans IDE 8.2
-
動作検証
- CentOS Linux release 7.2
- JDK 1.8.0_112
Webツールも公開しています。
Web便利ツール@ツールタロウ