--- /dev/null
+package revel
+
+// The session engine provides an interface to allow for storage of session data
+type (
+ SessionEngine interface {
+ Decode(c *Controller) // Called to decode the session information on the controller
+ Encode(c *Controller) // Called to encode the session information on the controller
+ }
+)
+
+var (
+ sessionEngineMap = map[string]func() SessionEngine{}
+ CurrentSessionEngine SessionEngine
+)
+
+// Initialize session engine on startup
+func init() {
+ OnAppStart(initSessionEngine, 5)
+}
+
+func RegisterSessionEngine(f func() SessionEngine, name string) {
+ sessionEngineMap[name] = f
+}
+
+// Called when application is starting up
+func initSessionEngine() {
+ // Check for session engine to use and assign it
+ sename := Config.StringDefault("session.engine", "revel-cookie")
+ if se, found := sessionEngineMap[sename]; found {
+ CurrentSessionEngine = se()
+ } else {
+ sessionLog.Warn("Session engine '%s' not found, using default session engine revel-cookie", sename)
+ CurrentSessionEngine = sessionEngineMap["revel-cookie"]()
+ }
+}