![Lv.5 セッションとフラッシュでスコープ管理 [play framework2.0] [java]](https://soylatte.jp/wp-content/themes/soy-magazine/assets/images/no-thumbnail.png)
スコープ管理をするときに、PlayではSessionとFlashというクラスを用意してくれています。
※1:タイムアウト処理をしたいときは、timestampをsessionに保持して都度判定してね、とのこと。
Sessionは、まぁセッションです。
ただしタイムアウトの設定は出来ません。※1
セッションは、ユーザーがブラウザを閉じるまで使えるようです。
Flashは1リクエストのみ、またげます。
※2:競合状態(race condition)
予期せぬ順序でイベントが発生するような状態。つまり、会計処理なんかでページ遷移の順序をサーバーで知りたいときなんかにflashを使うと予期せぬ順序で処理が進んで、予期せぬ例外のもとになるんだと思います。
予期せぬ順序でイベントが発生するような状態。つまり、会計処理なんかでページ遷移の順序をサーバーで知りたいときなんかにflashを使うと予期せぬ順序で処理が進んで、予期せぬ例外のもとになるんだと思います。
Flashは競合状態※2にあるので、単純な成功/失敗の判定にのみ使うべきだそうです。
いづれも以下の前提条件があります。
- Cookiesを利用してる
- サーバーにはデータは残らない
- 4KBが上限
- Stringのみ格納できる
※3:キャッシュしたいなら、別途キャッシュAPIを使うらしいです。The Play cache API
ただし、Playではsessionをキャッシュとして利用することは考慮されていない。※3
使い方は以下です。
sessionもflashもMap<String,String>を継承しているので、基本的に
Mapのそれです。
[java toolbar=”false”]
// セッション保持
session(“connected”, “user@gmail.com”);
// セッション保持
session(“connected”, “user@gmail.com”);
// セッション取得
String user = session(“connected”);
// セッション削除
session().remove(“connected”);
// セッション初期化
session().clear();
[/java]
flashも使い方は同じ。