golang session实现库 支持cookie, redis,mysql等多种存储方式
在Go语言中,可以使用gorilla/session
库来实现支持多种存储方式的session管理。以下是一个使用gorilla/session
库的示例,它演示了如何使用cookie和Redis作为存储方式。
首先,需要安装gorilla/session
库:
go get github.com/gorilla/session
go get github.com/gorilla/securecookie
如果使用Redis作为存储,还需要安装redis
的Go客户端:
go get github.com/go-redis/redis
以下是一个简单的示例代码,演示了如何使用gorilla/session
库:
package main
import (
"net/http"
"github.com/gorilla/mux"
"github.com/gorilla/sessions"
"github.com/go-redis/redis"
)
var (
// 使用cookie存储session
store = sessions.NewCookieStore([]byte("something-very-secret"))
// 使用Redis存储session
// redisClient = redis.NewClient(&redis.Options{
// Addr: "localhost:6379",
// Password: "", // no password set
// DB: 0, // use default DB
// })
// store = sessions.NewRedisStore(10*time.Minute, redisClient)
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/set", setSession).Methods("GET")
r.HandleFunc("/get", getSession).Methods("GET")
http.ListenAndServe(":8080", r)
}
func setSession(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session-name")
session.Values["foo"] = "bar"
session.Save(r, w)
}
func getSession(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session-name")
foo := session.Values["foo"]
w.Write([]byte(foo.(string)))
}
在这个示例中,store
变量被定义为使用sessions.NewCookieStore
创建的cookie存储。如果想要使用Redis作为存储,可以取消注释Redis存储的定义,并注释掉cookie存储的定义。
setSession
函数设置了一个名为foo
的session值,而getSession
函数获取并返回这个值。
这个示例演示了如何使用gorilla/session
库来管理session,并且如何根据需要选择不同的存储方式。
评论已关闭