Demo 学 Echo Part11 Gorilla Session
前面用了Gorilla的Cookie,Session也可以用他写的。 首次访问get时,session没有村数据,显示empty result 访问set时,会写入hello 和 world,然后再307临时重定向到get,会显示 hello world 访问delete,会删除session,再307到get显示empty result。
demo 采用cookie来存储session数据,也支持其他多种方式存储。
package main
import (
"fmt"
"net/http"
"github.com/gorilla/sessions"
"github.com/labstack/echo"
)
const SESSION_ID = "id"
func newCookieStore() *sessions.CookieStore {
authKey := []byte("my-auth-key-very-secret")
encryptionKey := []byte("my-encryption-key-very-secret123")
store := sessions.NewCookieStore(authKey, encryptionKey)
store.Options.Path = "/"
store.Options.MaxAge = 86400 * 7
store.Options.HttpOnly = true
return store
}
var store = newCookieStore()
func main() {
e := echo.New()
e.GET("/get", func(c echo.Context) error {
session, _ := store.Get(c.Request(), SESSION_ID)
if len(session.Values) == 0 {
return c.String(http.StatusOK, "empty result")
}
return c.String(http.StatusOK, fmt.Sprintf(
"%s %s",
session.Values["message1"],
session.Values["message2"],
))
})
e.GET("/set", func(c echo.Context) error {
session, _ := store.Get(c.Request(), SESSION_ID)
session.Values["message1"] = "hello"
session.Values["message2"] = "world"
session.Save(c.Request(), c.Response())
return c.Redirect(http.StatusTemporaryRedirect, "/get")
})
e.GET("/delete", func(c echo.Context) error {
session, _ := store.Get(c.Request(), SESSION_ID)
session.Options.MaxAge = -1
session.Save(c.Request(), c.Response())
return c.Redirect(http.StatusTemporaryRedirect, "/get")
})
e.Logger.Fatal(e.Start(":9000"))
}
最后修改于 2019-08-17