カテゴリ: Play Framework 更新日: 2026/03/21

Play FrameworkでのCookie操作を徹底解説!初心者向けセッション管理ガイド

Cookieの基本とPlay Frameworkでの扱い方
Cookieの基本とPlay Frameworkでの扱い方

先生と生徒の会話形式で理解しよう

生徒

「Play FrameworkでWebアプリを作っているのですが、ユーザーのログイン状態を保存したり、ブラウザにデータを一時的に覚えさせたりする方法はありますか?」

先生

「それには『Cookie(クッキー)』という仕組みを使います。Play Frameworkでは、このCookieを非常に簡単に扱うための機能が備わっているんですよ。」

生徒

「クッキーって、あの食べるお菓子の名前と同じですね!具体的にどうやってプログラムで書くんですか?」

先生

「名前は可愛いですが、Web開発ではとても重要な技術です。Javaを使って実際にCookieを発行したり読み取ったりする方法を、一緒に見ていきましょう!」

1. Cookieの基本概念と仕組み

1. Cookieの基本概念と仕組み
1. Cookieの基本概念と仕組み

Webサイトを閲覧しているとき、一度ログインすると別のページに移動してもログイン状態が維持されていたり、ショッピングカートの中身が保存されていたりすることがあります。これは、Webブラウザとサーバーの間で「Cookie(クッキー)」と呼ばれる小さなテキストデータをやり取りしているからです。

本来、Webの通信(HTTP)は「状態を持たない(ステートレス)」という特徴があります。つまり、一度の通信が終わるとサーバーは「さっき誰がアクセスしてきたか」を忘れてしまいます。これでは不便なため、サーバーがブラウザに対して「このデータを次回のアクセスでも見せてね」と預ける名札のようなものがCookieの役割です。Play FrameworkはこのCookieのやり取りをJavaの直感的なコードで制御できるように設計されています。

2. Play FrameworkでのCookie発行方法

2. Play FrameworkでのCookie発行方法
2. Play FrameworkでのCookie発行方法

Play Frameworkでブラウザに新しくCookieを保存させるには、コントローラーのレスポンスに対してメソッドを呼び出します。Java版のPlay Frameworkでは、withCookiesメソッドを使用してCookieオブジェクトを追加します。

まずは、最もシンプルなCookieの作成例を見てみましょう。ここでは、ユーザーの好みのテーマ設定(「dark」モードなど)を保存する処理を想定しています。


import play.mvc.*;
import play.mvc.Http.Cookie;

public class HomeController extends Controller {
    public Result setCookie() {
        // "theme"という名前で"dark"という値をCookieにセットします
        return ok("Cookieをセットしました")
            .withCookies(Cookie.builder("theme", "dark").build());
    }
}

このコードでは、Cookie.builderを使ってCookieの名前と値を指定しています。ブラウザはこのレスポンスを受け取ると、指定されたデータを自身のストレージに保存し、次回以降のアクセスで自動的にサーバーへ送信するようになります。

3. 保存されたCookieを読み取る方法

3. 保存されたCookieを読み取る方法
3. 保存されたCookieを読み取る方法

ブラウザから送られてきたCookieを読み取るには、リクエストオブジェクトから取得します。Play Frameworkではrequest().cookie("名前")という形式で、特定のCookieにアクセスできます。

以下の例では、先ほど保存した「theme」というCookieが存在するかを確認し、その値を取得して画面に表示する処理を行っています。


public Result getCookie(Http.Request request) {
    // リクエストから"theme"という名前のCookieを取得しようとします
    return request.cookie("theme")
        .map(cookie -> ok("保存されているテーマは: " + cookie.value()))
        .orElse(ok("Cookieが見つかりませんでした"));
}

このように、Optional型として返されるため、値が存在しない場合の処理も安全に記述できるのがモダンなJavaフレームワークであるPlayの強みです。Cookieが存在すればその値を使い、なければデフォルトの挙動をさせるといった条件分岐がスムーズに行えます。

4. Cookieの有効期限と属性の設定

4. Cookieの有効期限と属性の設定
4. Cookieの有効期限と属性の設定

Cookieには、単純な名前と値以外にも重要な設定項目(属性)があります。特に「有効期限(Max-Age)」は重要です。期限を設定しないCookieはブラウザを閉じると消えてしまいますが、期限を設定すれば、数日後や数ヶ月後までデータを保持させることができます。

また、セキュリティのために「HttpOnly」や「Secure」といった属性を付与することも推奨されます。HttpOnly属性をつけると、ブラウザ上のJavaScriptからCookieが盗まれるのを防ぐことができ、Secure属性をつけるとHTTPS通信のときだけCookieが送信されるようになります。Play Frameworkのビルダーを使えば、これらも簡単に設定可能です。


import java.time.Duration;

public Result setAdvancedCookie() {
    // 有効期限を1週間に設定し、JavaScriptからのアクセスを禁止する設定
    Http.Cookie myCookie = Cookie.builder("user_id", "user123")
        .withMaxAge(Duration.ofDays(7)) // 7日間有効
        .withHttpOnly(true)             // セキュリティ向上
        .withSecure(true)               // HTTPS通信のみ
        .build();

    return ok("高度な設定のCookieを保存しました").withCookies(myCookie);
}

5. 不要になったCookieを削除する

5. 不要になったCookieを削除する
5. 不要になったCookieを削除する

ログアウト処理などで、保存していたCookieを削除したい場合があります。実は、サーバーからブラウザにあるCookieを直接消去する命令はありません。代わりに、「そのCookieの有効期限を今すぐ切る」という命令を送ることで削除を実現します。

Play FrameworkではdiscardCookieメソッドを使用します。これにより、ブラウザに対して特定の名前のCookieを破棄するように指示できます。


public Result deleteCookie() {
    // "theme"という名前のCookieを破棄します
    return ok("Cookieを削除しました").discardingCookie("theme");
}

このメソッドを呼ぶことで、ブラウザ側のCookie管理リストから該当するデータが消去され、次回のアクセスからはCookieが送信されなくなります。ユーザーのセッションを終了させる際によく使われる重要なテクニックです。

6. セッション管理とCookieの関係性

6. セッション管理とCookieの関係性
6. セッション管理とCookieの関係性

Play Frameworkには「Session」という機能もありますが、実はこのSessionも内部的にはCookieを利用しています。PlayのSessionは、サーバー側にデータを保存するのではなく、データ全体を暗号化して一つのCookieとしてブラウザに持たせる「クライアントサイドセッション」という方式を採用しています。

そのため、Sessionを使うことは「特別なCookieを使うこと」と同義です。個別のCookieを自分で管理するのと、フレームワークが用意したSession機能を使うのとでは、用途が異なります。単純な設定値(言語設定やテーマ)なら個別のCookie、ユーザーの識別情報ならSessionというように使い分けるのが一般的です。どちらも根本にあるのはCookieという技術であることを理解しておくと、Webアプリの構造がより明確に見えてくるはずです。

7. セキュリティ上の注意点とベストプラクティス

7. セキュリティ上の注意点とベストプラクティス
7. セキュリティ上の注意点とベストプラクティス

Cookieは非常に便利ですが、ユーザーのブラウザに保存されるデータであるため、悪意のあるユーザーによって内容を書き換えられたり、盗み見られたりするリスクがあります。特にログイン情報をCookieに直接保存することは絶対に避けてください。誰でも見ることができてしまうからです。

安全に運用するためには、重要なデータは必ずサーバー側で署名・暗号化されるPlayのSession機能を使うか、Cookieを使用する場合は機密情報を含めないように設計します。また、先ほど紹介したHttpOnly属性やSecure属性を適切に設定し、クロスサイトスクリプティング(XSS)などの攻撃からユーザーを守る意識を持つことが、プロのWeb開発者への近道です。Play Frameworkはデフォルトで安全な設定を推奨していますが、開発者がその意味を理解しておくことは非常に重要です。

8. Web開発の基本としてのCookie

8. Web開発の基本としてのCookie
8. Web開発の基本としてのCookie

今回学んだCookieの扱いは、Play Frameworkに限らず、あらゆるWeb開発の基礎となる知識です。ブラウザとサーバーがどのように情報を共有し、ユーザー体験を向上させているのかを知ることは、プログラミング初心者にとって大きな一歩となります。

Play FrameworkのJava APIは非常に整理されており、Cookieの操作も直感的に行えるようになっています。まずは小さなサンプルプロジェクトを作って、実際にブラウザのデベロッパーツール(開発者ツール)を開き、ApplicationタブからCookieが保存される様子を観察してみてください。コードで書いた内容が実際にブラウザの中にデータとして現れるのを見るのは、Web開発の楽しさを実感できる瞬間のひとつです。この基礎を土台に、より高度な認証機能やセッション管理に挑戦していきましょう。

関連記事:

関連記事なし

カテゴリの一覧へ
新着記事
New1
Play Framework
Play FrameworkでのCookie操作を徹底解説!初心者向けセッション管理ガイド
New2
Jakarta EE
Jakarta EE JAX-RSの@Pathアノテーションとは?REST APIのリソース定義を初心者向けに徹底解説
New3
Play Framework
Play FrameworkでのCookie(クッキー)の使い方を完全解説!Java初心者向け基本ガイド
New4
Jakarta EE
Jakarta EEのRESTアーキテクチャの基本原則を徹底解説!JAX-RSで学ぶRESTful Webサービス入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta EEに最適なJDKの選び方と推奨バージョンを初心者向けに解説!
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとJava EEの違いまとめ!初心者向けにやさしく比較解説
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとは?Java EEからの移行の歴史をやさしく解説
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.6
Java&Spring記事人気No6
Play Framework
Play Frameworkとは?特徴と歴史を初心者向けにわかりやすく解説
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EE WebSocketサーバーエンドポイントの作成方法を初心者向けに解説 リアルタイム通信アプリ開発入門
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta サーブレット開発でよくあるエラーと解決方法を徹底解説!初心者でも安心のトラブルシューティング