All Projects → gnieh → spray-session

gnieh / spray-session

Licence: Apache-2.0 license
Session management for Spray framework

Programming Languages

scala
5932 projects

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")
        }
      }
    }
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].