6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PlayFrameworkでCookieを試してみました

Last updated at Posted at 2015-08-12

はじめに

PlayFrameworkでクッキーを保存したり、削除したりしてみました。結構ニッチな話かもしれませんが、よろしくお願いします。

ひとまず、参考にした記事を紹介します。

この記事では、使用したディレクトリ構造と使用したファイルを紹介します。(もし、気づいたことがありましたら、ご指摘いただければ幸いです。)

ディレクトリ構造

使用したディレクトリ構造は下記のディレクトリ構造になります。

.
├── 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を見てみます。ここではプロジェクトを設定しています。

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を見てみます。ここではプラグインを指定します。

plugins.sbt
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.2")

build.propertiesを見てみます。ここではsbtのバージョンを指定します。

build.properties
sbt.version=0.13.8

routesを見てみます。ここではリクエストをコントローラのアクションに関連付けます。(余談ですが、eatは動詞なので、URLに使用することはあまり好まれないようです。)

GET /       controllers.Tokyo.index
GET /cookie controllers.Tokyo.cookie
GET /eat    controllers.Tokyo.eat

application.confを見てみます。このファイルが存在しない場合、実行時エラーになります。

application.conf
# conf/application.conf

Tokyo.scalaを見てみます。ここではコントローラを用意します。

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!"とすると、実行時エラーになります。原因は、クッキーの値に利用できないカンマや半角スペースを使っているからでした。

振り返り

クッキーだけではあまり面白くないかもしれませんが、クッキーを利用するような話は面白いかもしれません。

また、クッキーの値に利用できる文字も奥深そうな話です。!は利用できるかと思ったのですが、利用できませんでした。よく分からない状態です。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?