Skip to content

gnieh/spray-session

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages