gnieh / spray-session

Session management for Spray framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Spray Session Build Status

Provide session management for Spray applications. There are three session managers implemented:

  • In memory sessions (stateful session manager),
  • Session saved in a redis server (stateful session manager, optional dependency on redisreact),
  • Cookie baked sessions (stateless session manager).

One can easily add new session managers by implementing the trait spray.routing.session.StatefulSessionManager or spray.routing.session.StatelessSessionManager depending on .

To get access to the session directives you can extend either the trait spray.routing.directives.StatefulSessionDirectives or spray.routing.directives.StatelessSessionDirectives.

Sample Code

Below are two code snippets showing how the session directives can be used. The first one demonstrates the use of a stateful session manager, and the second one how to use a stateless session manager.

import spray.routing._
import session._
import directives._

import akka.actor.ActorSystem
import akka.util.Timeout

import scala.concurrent.duration._

import com.typesafe.config.ConfigFactory

class MyService(implicit val actorRefFactory: ActorSystem) extends HttpService with StatefulSessionManagerDirectives[Int] {

  val config = ConfigFactory.load()

  import actorRefFactory.dispatcher

  implicit val timeout = Timeout(20.seconds)

  implicit val manager = new InMemorySessionManager[Int](config)

  val route =
    cookieSession() { (id, map) =>
      get {
        val result = map.getOrElse("value", 0)
        updateSession(id, map.updated("value", result + 1)) {
            complete(result.toString)
          }
      } ~
      delete {
        invalidateSession(id) {
          complete("ok")
        }
      }
    }
}

import spray.routing._
import session._
import directives._

import akka.actor.ActorSystem

import com.typesafe.config.ConfigFactory

class MyService(implicit val actorRefFactory: ActorSystem) extends HttpService with StatelessSessionManagerDirectives[String] {

  val config = ConfigFactory.load()

  import actorRefFactory.dispatcher

  implicit val manager = new CookieBakerSessionManager(config)

  val route =
    cookieSession() { map =>
      get {
        val result = map.getOrElse("value", "0")
        setCookieSession(map.updated("value", (result.toInt + 1).toString)) {
          complete(result)
        }
      } ~
      delete {
        invalidate() {
          complete("ok")
        }
      }
    }
}

About

Session management for Spray framework

License:Apache License 2.0


Languages

Language:Scala 100.0%