カテゴリ: Play Framework 更新日: 2026/01/16

Play FrameworkでセッションとCookieを扱う方法を完全ガイド!

セッションとCookieを扱う方法
セッションとCookieを扱う方法

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

生徒

「Play Frameworkでユーザーのログイン状態を維持したり、一時的に情報を保存したりするにはどうすればいいですか?」

先生

「それには『セッション』と『Cookie(クッキー)』という仕組みを使います。これらを使うことで、ページを移動してもデータを保持し続けることができるんですよ。」

生徒

「なんだか難しそうですね。Javaのコードで簡単に操作できるんでしょうか?」

先生

「はい、Play Frameworkならコントローラからとてもシンプルに扱えます。まずは基本的な仕組みから一緒に見ていきましょう!」

1. Cookieとセッションの基本的な違いとは?

1. Cookieとセッションの基本的な違いとは?
1. Cookieとセッションの基本的な違いとは?

Webアプリケーション開発において、Cookie(クッキー)セッションは、どちらも「状態を保持する」ために使われます。通常、Webの通信(HTTP)は一回ごとに完結してしまうため、前のページで何をしたかを覚えておくことができません。そこでこれらの技術が必要になります。

Cookieは、ユーザーのブラウザ側に保存される小さなテキストデータのことです。一方、Play Frameworkにおけるセッションは、実は特別な種類のCookieです。Playのセッションデータはサーバー側ではなく、署名されたCookieとしてブラウザに保存されるという特徴があります。これにより、サーバーのメモリを節約しつつ、安全にデータをやり取りできる仕組みになっています。

2. Play Frameworkでのセッションの書き込み

2. Play Frameworkでのセッションの書き込み
2. Play Frameworkでのセッションの書き込み

コントローラ入門としてまず覚えたいのが、セッションへのデータ保存方法です。Play Frameworkでは、レスポンスを返す際に addingToSession メソッドを使って、キーと値のペアを保存します。例えば、ログインしたユーザーのメールアドレスを保存する場合は次のように記述します。


package controllers;

import play.mvc.*;

public class LoginController extends Controller {
    public Result login() {
        // ユーザー情報をセッションに保存してトップページへ
        return ok("ログインしました")
            .addingToSession(request(), "user_email", "example@play.com");
    }
}

このコードでは、user_email という名前の箱に、メールアドレスの文字列を入れています。これで次のページに移動しても、この情報を引き出すことが可能になります。

3. 保存したセッションデータを読み出す方法

3. 保存したセッションデータを読み出す方法
3. 保存したセッションデータを読み出す方法

セッションに保存したデータを取り出すには、リクエストオブジェクトから session() を呼び出します。Javaの Optional 型や get メソッドを使って、特定のキーに紐付いた値を取得できます。

プログラミング未経験の方には、「合言葉を確認する」ようなイメージだと説明すると分かりやすいかもしれません。ブラウザが持ってきた「合言葉(セッション)」をサーバーが受け取って、内容を確認する作業です。


public Result profile(Http.Request request) {
    // セッションから user_email を取り出す
    return request.session()
        .get("user_email")
        .map(email -> ok("あなたのメールアドレスは: " + email))
        .orElse(unauthorized("ログインしていません"));
}

このように、データが存在する場合としない場合(ログインしていない場合)で処理を分岐させるのが一般的です。

4. セッションの削除とクリア

4. セッションの削除とクリア
4. セッションの削除とクリア

ログアウト処理などで、保存したセッションデータを消去したい場合もあります。Play Frameworkには、特定の値を消す removingFromSession と、すべてのセッションを空にする withNewSession が用意されています。

セキュリティの観点から、ログアウト時には withNewSession を使って古い情報を完全に破棄することが推奨されます。これにより、他人が古いセッションを悪用するリスクを減らすことができます。


public Result logout(Http.Request request) {
    // セッションを完全に新しく(空に)してリダイレクト
    return redirect("/")
        .withNewSession();
}

5. Cookieを直接扱う方法

5. Cookieを直接扱う方法
5. Cookieを直接扱う方法

セッションよりも細かい制御(有効期限の設定など)を行いたい場合は、Cookieを直接操作します。例えば、「1週間ログイン状態を保持する」といった機能や、画面の表示設定(ダークモードのオンオフなど)を保存するのに適しています。

Play FrameworkでCookieを発行するには withCookies メソッドを使い、Http.Cookie オブジェクトを作成して渡します。Cookieには名前、値、そしてどれくらいの期間保存するか(MaxAge)などを細かく指定できます。


public Result setPref(Http.Request request) {
    // 有効期限を1日(86400秒)に設定したCookieを作成
    Http.Cookie themeCookie = Http.Cookie.builder("theme", "dark")
        .withMaxAge(java.time.Duration.ofDays(1))
        .build();

    return ok("テーマを設定しました").withCookies(themeCookie);
}

6. セッションとセキュリティの注意点

6. セッションとセキュリティの注意点
6. セッションとセキュリティの注意点

Play Frameworkのセッションはブラウザ側に保存されるため、いくつか注意すべきセキュリティのポイントがあります。まず、セッションデータは「署名」されているため改ざんはできませんが、「中身を見る」ことは可能です。そのため、ユーザーのパスワードやクレジットカード番号などの機密情報を直接セッションに入れてはいけません。

また、セッションのサイズ制限(一般的に約4KB)にも注意が必要です。大量のデータを詰め込むと、ブラウザとサーバー間の通信量が増えてパフォーマンスが低下したり、正しく保存されなくなったりします。複雑なデータはデータベースに保存し、セッションにはそのデータの「ID」だけを入れるのがプロの設計技法です。

7. フラッシュ(Flash)スコープの使い方

7. フラッシュ(Flash)スコープの使い方
7. フラッシュ(Flash)スコープの使い方

「セッション」と似た機能で、Play Frameworkにはフラッシュ(Flash)という仕組みがあります。これは「次のリクエストまで」だけ有効な、超短期の保存場所です。主に「保存に成功しました!」といった通知メッセージを表示した後に、ページを再読み込みしたら消えてほしい場合に利用されます。


public Result update(Http.Request request) {
    // 処理完了後に、一度だけ有効なメッセージをセット
    return redirect("/dashboard")
        .flashing("success", "更新が完了しました!");
}

8. 開発時の動作確認テクニック

8. 開発時の動作確認テクニック
8. 開発時の動作確認テクニック

正しくCookieやセッションが発行されているか確認するには、ブラウザの「開発者ツール」を活用しましょう。Google Chromeであれば、F12キーを押して「Application」タブ内の「Cookies」を開くと、現在保存されているデータを確認できます。自分の書いたプログラムが意図通りにブラウザにデータを送っているか、目で見ることが上達の近道です。

9. セッション管理のまとめと次のステップ

9. セッション管理のまとめと次のステップ
9. セッション管理のまとめと次のステップ

Play Frameworkでのセッション管理とCookieの扱いは、Webアプリの利便性を高めるために欠かせない技術です。今回の記事で、データの保存、取得、削除という基本的なサイクルを学びました。これらを組み合わせることで、ユーザーごとにパーソナライズされた体験を提供できるようになります。

今後は、これらの仕組みを使って実際のログイン機能を実装したり、データベースと連携させたりする方法を学んでいくと良いでしょう。Javaの標準的なライブラリとPlayの便利な機能を駆使して、より高度なアプリケーション開発に挑戦してみてください!

カテゴリの一覧へ
新着記事
New1
Play Framework
Play FrameworkでセッションとCookieを扱う方法を完全ガイド!
New2
Jakarta EE
Jakarta EE JSPのパフォーマンス改善ポイントを基礎から理解しよう【初心者向け完全解説】
New3
Play Framework
Play Frameworkでコントローラからリダイレクトする方法を徹底解説!
New4
Jakarta EE
Jakarta Server Pages(JSP)とJSTLの使い分けを徹底解説!初心者でも迷わない基本と考え方
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta EE JSPでJSTLを使ったテンプレート化の実践方法を初心者向けにやさしく解説
No.3
Java&Spring記事人気No3
Play Framework
Play FrameworkでJSONを扱う方法!リクエスト受信とレスポンス返却
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EE JSPでJSTL導入時に発生するエラーの解決方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta Server Pages(JSP)とJSTLの使い分けを徹底解説!初心者でも迷わない基本と考え方
No.8
Java&Spring記事人気No8
Play Framework
Play Frameworkでフォームデータをコントローラで扱う方法を完全解説|Java初心者向けコントローラ入門