- 下载
go get github.com/gin-contrib/sessions
- 代码
package main import ( "encoding/gob" "net/http" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" ) type LoginUser struct { Id string Name string Age int } func main() { // 注册LoginUser结构体,使其可以跨路由存取 gob.Register(LoginUser{}) engine := gin.Default() // 添加session中间件 store := cookie.NewStore([]byte("secret")) engine.Use(sessions.Sessions("mysession", store)) engine.GET("login", loginHandler) engine.GET("info", infoHandler) engine.Run(":9008") } // 获取用户信息 func infoHandler(c *gin.Context) { // 判断参数 name := c.Query("name") if len(name) == 0 { c.JSON(http.StatusBadRequest, "参数错误") return } // 创建session session := sessions.Default(c) // 定义session的key sessionKey := "session_" + name // 获取session的value sessionValue := session.Get(sessionKey) // 判断value if sessionValue != nil { c.JSON(http.StatusOK, gin.H{"info": sessionValue}) c.String(http.StatusOK, session.Get("aabbcc").(string)) } else { c.JSON(http.StatusOK, "登陆过期或未登录") } return } // 用户登陆 func loginHandler(c *gin.Context) { // 判断参数 name := c.Query("name") if len(name) == 0 { c.JSON(http.StatusBadRequest, "参数错误") return } // 创建session session := sessions.Default(c) // 定义session的key sessionKey := "session_" + name // 获取session的value 并判断: sessionValue!=nil 则返回会话信息 sessionValue==nil 则创建并保存会话 sessionValue := session.Get(sessionKey) if sessionValue != nil { c.JSON(http.StatusOK, gin.H{"info": sessionValue, "msg": "重复登陆"}) return } // 创建loginUser并保存 loginUser := LoginUser{Id: "123", Name: name, Age: 30} session.Set("aabbcc", "aabbcc123456") // 单独测试保存string类型 session.Set(sessionKey, loginUser) // 设置session的参数 options := sessions.Options{} options.Path = "/" options.MaxAge = 10 // 有效期10秒 session.Options(options) // 保存session session.Save() c.JSON(http.StatusOK, gin.H{"info": loginUser, "msg": "登陆成功"}) return }
- 测试
1 获取用户信息 http://127.0.0.1:9008/info?name=admin
2 用户登陆
3 再次获取用户信息
- 完成
35--go语言学习之session操作
最新推荐文章于 2024-03-05 18:47:27 发布