= セッション管理 = セッション管理については特にscala版の特記事項は無い模様。つまり、Java版と同じらしい。 また、セッションをキャッシュとして使わないよう、playはキャッシュ機構を備えている。 * [[http://playdocja.appspot.com/documentation/1.2/controllers#session]] * [[http://playdocja.appspot.com/documentation/1.2.2/cache]] == フラッシュスコープとは == いきなりフラッシュスコープという耳慣れない言葉が出てくるが、以下に参考を示す。 * [[http://d.hatena.ne.jp/higayasuo/20090222/1235287424]] 例えば、フォームをサブミットし、その内容がエラーだった場合、エラーページにリダイレクトするが、その際のメッセージをエラーページに受け渡すためには、以下のいずれかを行わなければならない。 * エラーメッセージをパラメータとして受け渡す。 * エラーメッセージをセッションに保存し、エラーページにて表示した後にそれを消す。 フラッシュスコープを利用すると以下のような動作になるようだ。 * エラー内容をフラッシュスコープに保存する * エラーページにリダイレクトする * エラーページでエラー内容を表示する * フラッシュスコープの内容は自動的に消える == セッションの使い方 == play.mvc.ScalaControllerには、以下のような定義がある。 {{{ implicit def request = Request.current() implicit def response = Response.current() implicit def session = Session.current() implicit def flash = Flash.current() implicit def params = Params.current() implicit def renderArgs = RenderArgs.current() implicit def validation = Validation.current() }}} 通常、コントローラは {{{ object Application extends Controller { import views.Application._ case class User(name: String, addr: String) def index() = html.index("Your Scala application is ready!") } }}} などと記述されるが、このControllerは実はplay.mvc.packageにて「 type Controller = ScalaController」とされており、ScalaControllerのことになる。 つまり、上記コントローラコード中で、sessionを参照すると、これはSession.current()になる。Sessionは [[http://www.playframework.org/documentation/api/1.2.3/play/mvc/Scope.Session.html|play.mvc.Scope.Session]]のこと。 おそらく、put(key: String, value: String)を呼び出せばセッションに名前付文字列を保持することができる。 == キャッシュの利用 == セッションには極めて小さな文字列しか保存できず、大きなデータやバイナリを保存するにはキャッシュを用いる必要がある。 ただし、ユーザごとに個別のセッション保持領域とは異なり、キャッシュはplay環境でグローバルであることに注意。 ユーザごと(セッションごと)の情報を保持するには、セッションのIDをキャッシュ用キーに含める必要がある。 もちろん、ユーザが識別できれば何でもよい。 ※注意:Cacheというクラスは、実際にはScalaCacheを参照する(Controllerが実際にはScalaControllerであるように)。 例えばgetの戻り値がOption[T]となっているので注意しなければならない。 === 参考 === * [[http://www.playframework.org/documentation/api/1.2.3/play/cache/Cache.html|play.cache.Cache|Java版のCache]] * [[http://stackoverflow.com/questions/3654582/object-session-in-playframework]] * [[http://ja.w3support.net/index.php?db=so&id=1694828]] * [[http://www.nigauri.me/tech/java/play-framework]]