Session Middleware for Golang
package main
import (
"fmt"
"log"
"net/http"
"time"
"github.com/moonrhythm/session"
"github.com/moonrhythm/session/store"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
s, _ := session.Get(r.Context(), "sess")
cnt := s.GetInt("counter")
cnt++
s.Set("counter", cnt)
w.Header().Set("Content-Type", "text/html")
fmt.Fprintf(w, "Couter: %d<br><a href=\"/reset\">Reset</a>", cnt)
})
mux.HandleFunc("/reset", func(w http.ResponseWriter, r *http.Request) {
s, _ := session.Get(r.Context(), "sess")
s.Del("counter")
http.Redirect(w, r, "/", http.StatusFound)
})
h := session.Middleware(session.Config{
Domain: "localhost",
HTTPOnly: true,
Secret: []byte("testsecret1234"),
MaxAge: time.Minute,
Path: "/",
Secure: session.PreferSecure,
Store: new(store.Memory),
})(mux)
// equals to
// h := session.New(session.Config{...}).Middleware()(mux)
log.Fatal(http.ListenAndServe(":8080", h))
}
package main
import (
"fmt"
"log"
"net/http"
"time"
"github.com/moonrhythm/session"
"github.com/moonrhythm/session/store"
)
func main() {
mux := http.NewServeMux()
m := session.New(session.Config{
Domain: "localhost",
HTTPOnly: true,
Secret: []byte("testsecret1234"),
MaxAge: time.Minute,
Path: "/",
Secure: session.PreferSecure,
Store: new(store.Memory),
})
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
s, _ := m.Get(r, "sess")
cnt := s.GetInt("counter")
cnt++
s.Set("counter", cnt)
m.Save(r.Context(), w, s)
w.Header().Set("Content-Type", "text/html")
fmt.Fprintf(w, "Couter: %d<br><a href=\"/reset\">Reset</a>", cnt)
})
mux.HandleFunc("/reset", func(w http.ResponseWriter, r *http.Request) {
s, _ := m.Get(r, "sess")
s.Del("counter")
m.Save(r.Context(), w, s)
http.Redirect(w, r, "/", http.StatusFound)
})
log.Fatal(http.ListenAndServe(":8080", mux))
}
MIT