UnfilteredでCookieを使う

リクエストのパターンマッチにおいて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)