Documentation
¶
Overview ¶
Package seshcookie enables you to associate session-state with HTTP requests while keeping your server stateless. Because session-state is transferred as part of the HTTP request (in a cookie), state can be seamlessly maintained between server restarts or load balancing. It's inspired by Beaker (http://pypi.python.org/pypi/Beaker), which provides a similar service for Python webapps. The cookies are authenticated and encrypted (using AES-GCM) with a key derived from a string provided to the NewHandler function. This makes seshcookie reliable and secure: session contents are opaque to users and not able to be manipulated or forged by third parties.
Storing session-state in a cookie makes building some apps trivial, like this example that tells a user how many times they have visited the site:
package main
import (
"net/http"
"log"
"fmt"
"github.com/bpowers/seshcookie"
)
type VisitedHandler struct{}
func (h *VisitedHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
if req.URL.Path != "/" {
return
}
session := seshcookie.GetSession(req.Context())
count, _ := session["count"].(int)
count++
session["count"] = count
rw.Header().Set("Content-Type", "text/plain")
rw.WriteHeader(200)
if count == 1 {
rw.Write([]byte("this is your first visit, welcome!"))
} else {
rw.Write([]byte(fmt.Sprintf("page view #%d", count)))
}
}
func main() {
key := "session key, preferably a sequence of data from /dev/urandom"
http.Handle("/", seshcookie.NewHandler(
&VisitedHandler{},
key,
&seshcookie.Config{HTTPOnly: true, Secure: false}))
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatalf("ListenAndServe: %s", err)
}
}
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // DefaultConfig is used as the configuration if a nil config // is passed to NewHandler DefaultConfig = &Config{ CookieName: defaultCookieName, CookiePath: "/", HTTPOnly: true, Secure: true, } )
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
CookieName string // name of the cookie to store our session in
CookiePath string // resource path the cookie is valid for
HTTPOnly bool // don't allow JavaScript to access cookie
Secure bool // only send session over HTTPS
}
Config provides directives to a seshcookie instance on cookie attributes, like if they are accessible from JavaScript and/or only set on HTTPS connections.
type Handler ¶
Handler is the seshcookie HTTP handler that provides a Session object to child handlers.
func NewHandler ¶
NewHandler creates a new seshcookie Handler with a given encryption key and configuration.
type Session ¶
type Session map[string]interface{}
Session is simply a map of keys to arbitrary values, with the restriction that the value must be GOB-encodable.
func GetSession ¶
GetSession is a wrapper to grab the seshcookie Session out of a Context.
By only providing a 'Get' API, we ensure that clients can't mistakenly set something unexpected on the given context in place of the session.