Documentation
¶
Overview ¶
Package stacksession provides wrappers based on the github.com/gorilla/sessions. It assumes one session per request. If you need multiple sessions pre request, define your own wrapper or use gorilla/sessions directly.
stacksession expects the ResponseWriter to a wrap.Contexter supporting sessions.Session and error
Example ¶
package main
import (
"fmt"
"net/http"
"net/http/httptest"
"sync/atomic"
"github.com/go-on/stack"
"github.com/go-on/stack/third-party/stacksession"
"gopkg.in/go-on/sessions.v1"
)
func printFlashes(ctx stack.Contexter, w http.ResponseWriter, r *http.Request, next http.Handler) {
var session stacksession.Session
ctx.Get(&session)
for _, fl := range session.Flashes() {
fmt.Printf("Flash: %v\n", fl)
}
next.ServeHTTP(w, r)
}
var counter = int64(0)
func setNameAndFlash(ctx stack.Contexter, w http.ResponseWriter, r *http.Request, next http.Handler) {
atomic.AddInt64(&counter, 1)
var session stacksession.Session
ctx.Get(&session)
session.Values["name"] = r.URL.Query().Get("name")
if counter == 1 {
session.AddFlash("Hello, flash messages world!")
}
next.ServeHTTP(w, r)
}
func printName(ctx stack.Contexter, w http.ResponseWriter, r *http.Request) {
var session stacksession.Session
ctx.Get(&session)
fmt.Printf("Name: %s\n", session.Values["name"])
}
var store = sessions.NewCookieStore([]byte("something-very-secret"))
func main() {
s := stack.New().
UseWithContext(stacksession.SaveAndClear).
UseWithContext(stacksession.NewStore(store, "my-session-name")).
UseFuncWithContext(printFlashes).
UseFuncWithContext(setNameAndFlash).
WrapFuncWithContext(printName)
req, _ := http.NewRequest("GET", "/?name=Peter", nil)
rec := httptest.NewRecorder()
s.ServeHTTP(rec, req)
s.ServeHTTP(rec, req)
s.ServeHTTP(rec, req)
}
Output: Name: Peter Flash: Hello, flash messages world! Name: Peter Name: Peter
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var SaveAndClear = saveAndClear{}
SaveAndClear saves the session and clears up any references to the request. it should be used at the beginning of the mw chain (but after the Contexter)
Functions ¶
Types ¶
Click to show internal directories.
Click to hide internal directories.