はじめに
PlayFrameworkでクッキーを保存したり、削除したりしてみました。結構ニッチな話かもしれませんが、よろしくお願いします。
ひとまず、参考にした記事を紹介します。
- How to use Cookies in Play framework | Knoldus
- typesafe activatorを使わないplayframework2.3の始め方 - scalaとか・・・
- Allowed characters in cookies - Stack Overflow
この記事では、使用したディレクトリ構造と使用したファイルを紹介します。(もし、気づいたことがありましたら、ご指摘いただければ幸いです。)
ディレクトリ構造
使用したディレクトリ構造は下記のディレクトリ構造になります。
.
├── app
│ └── controllers
│ └── Tokyo.scala
├── build.sbt
├── conf
│ ├── application.conf
│ └── routes
└── project
├── build.properties
└── plugins.sbt
サーバーを起動するコマンドは下記のコマンドラインになります。(Javaやsbtが必要です。)
sbt run
sbtのインストールは、sbtをこちらからダウンロードして、解凍して、PATHを通しました。
このコマンドを実行すると、サーバーが起動します。
サーバー起動後、ブラウザのアドレスバーにhttp://localhost:9000/
としたり、http://localhost:9000/cookie
としたり、http://localhost:9000/eat
としてみて下さい。
/
でブラウザにクッキーを保存して、/cookie
でクッキーの値を表示して、/eat
でブラウザに保存したクッキーを削除します。
ファイル
まずは、build.sbtを見てみます。ここではプロジェクトを設定しています。
lazy val commonSettings = Seq(
version := "0.1-SNAPSHOT",
organization := "com.sandbox",
scalaVersion := "2.11.6"
)
lazy val root = (project in file("."))
.settings(commonSettings: _*)
.enablePlugins(PlayScala)
つぎに、plugins.sbtを見てみます。ここではプラグインを指定します。
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.2")
build.propertiesを見てみます。ここではsbtのバージョンを指定します。
sbt.version=0.13.8
routesを見てみます。ここではリクエストをコントローラのアクションに関連付けます。(余談ですが、eatは動詞なので、URLに使用することはあまり好まれないようです。)
GET / controllers.Tokyo.index
GET /cookie controllers.Tokyo.cookie
GET /eat controllers.Tokyo.eat
application.confを見てみます。このファイルが存在しない場合、実行時エラーになります。
# conf/application.conf
Tokyo.scalaを見てみます。ここではコントローラを用意します。
package controllers
import play.api._
import play.api.mvc._
object Tokyo extends Controller {
def index = Action {
Ok("Hello cookie!").withCookies(Cookie("mycookie", "Oh-Cookie."))
}
def cookie = Action { request =>
Ok(request.cookies.get("mycookie").map(_.value).getOrElse("Nothing."))
}
def eat = Action {
Ok("Good taste!").discardingCookies(DiscardingCookie("mycookie"))
}
}
クッキーの値を"Oh, cookie!"とすると、実行時エラーになります。原因は、クッキーの値に利用できないカンマや半角スペースを使っているからでした。
振り返り
クッキーだけではあまり面白くないかもしれませんが、クッキーを利用するような話は面白いかもしれません。
また、クッキーの値に利用できる文字も奥深そうな話です。!
は利用できるかと思ったのですが、利用できませんでした。よく分からない状態です。