リクエストのパターンマッチにおいてCookiesという抽出子を使用してクッキーを取得することができます。また、ResponseCookiesというResponderを使用してクッキーを書き出すことができます。
以下はクッキーを使用したカウンタの例です。ブラウザでアクセスするたびにカウントアップされ、有効期限を指定していないのでブラウザを閉じると削除されます。
import unfiltered.Cookie case GET(Path("/cookie") & Cookies(cookies)) => { // counterという名前のクッキーを取得 val counter = (cookies("counter") match { case Some(cookie) => cookie.value.toInt case _ => 0 }) + 1 Ok ~> ResponseCookies(Cookie("counter", counter.toString)) ~> // クッキーを出力 Html(<p>{counter}</p>) // クッキーの値を表示 }
ResponseCookiesで出力するクッキーは以下のようにしてクッキーにパスや有効期限などを指定することができます。nameとvalue以外はオプションなのでOption型で指定する必要があります。
// クッキーを作成 val cookie = Cookie( name = "cookie-name", // クッキーの名前 value = "cookie-value", // クッキーの値 domain = Option("localhost"), // ドメイン maxAge = Some(300), // 有効期限(秒) path = Some("/cookie"), // パス secure = Some(true)) // SSL時のみ送信 // 作成したクッキーを出力 ResponseCookies(cookie)