endless pulse

どっくんどっくんふるえる毎日を過ごしています

Play framework 2.3 with Scalaで、セッション管理

どうもこんにちは、えみーです。
巷はPlay framework 2.4の話になっている気もしますが、気にせず勉強を進めます。

今回はPlay framework 2.3 with Scalaで、セッション管理。

Play framework 2.3のセッション

Play frameworkのセッションでググると、Controller、Action内で、requestのsessionっていう関数使ってる情報が多いけれど、それはPlay framework 2.2まで。2.3でrequest2sessionに変わっている。
(参考:Migration23 - 2.3.xSession and Flash implicitsの項)

Play framework 2.3の公式ドキュメントでは、request.sessonと、requestを指定して使う方法が記載されてます。
公式ドキュメント:Scala Session Flash - 2.3.x

じゃあそれで…と言いたいところだけど、どうやら、Playのセッションの実装は「クライアント側にクッキーとして持たせる」というのが方針らしい。
なので、以下の部分がちょっと問題。

  • 公式ドキュメントの例通り、文字列しか持たせられない。
  • 平文で持たせれば平文で見えちゃう。(画像参照)


※ちなみにぼかしてあるところは、署名になっているので、平文の改ざんはできない仕組み。

  • Cookieの上限サイズ(4KB)まで。

セッションタイムアウトは、Sessionの文章では「タイムスタンプでやってね」とのこと。といいつつ、2.3からは最大のタイムアウト時間は登録することができる。

タイムアウトの指定は、application.conf内に

session.maxAge=30m

とかやればよい。そうすればアプリケーション全体で作るセッションに効く。

キャッシュの利用

サーバ側に保存する情報として使いたいのであれば、PlayのCacheと組み合わせるのがよさそう。(参考:Scala Cache - 2.3.x

以下のサイトの方針に倣って、ログインのたびにランダムトークンを作って、それをセッションCookieとして持たせ、そのトークンとキャッシュを紐づける。
ステートレスなPlay2でログイン状態を管理する - C Sharpens you up

ちなみに、1回ページをまたぐときにだけ必要な情報であれば、フラッシュを使えばよい。
公式ドキュメント:Scala Session Flash - 2.3.x


ふぅ。

…というのを使って、次回は認証してみます。