session状态管理,登录注销
go get -u github.com/gin-contrib/sessions
初始化
import (
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie" //训责cookie为存储
)
r := gin.Default()
// 设置cookie存储引擎,这里使用cookie
store := cookie.NewStore([]byte("secret"))
r.Use(sessions.Sessions("session", store))//注册到gin
redis存储
import (
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/redis" //训责cookie为存储
)
r := gin.Default()
// 设置cookie存储引擎
store , err:= redis.NewStore(10, "tcp", "localhost:6379", "", []byte("34$fd.HmklI+lqs@dfK"))
if err != nil {
panic(err)
}
// 可选设置session选项,例如有效时间
store.Options(sessions.Options{
Path: "/",
MaxAge: 1296000, // 会话有效期为15天(单位:秒)
HttpOnly: true, // HttpOnly属性能增强会话的安全性
})
r.Use(sessions.Sessions("session", store)) //添加到中间件
设置和修改session
// 设置用户登录会话
session.Set("user", username) //设置session
err := session.Save() //保存session
//如果保存session失败显示错误
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to save session"})
return
}
//保存成功后的操作
读取session
session := sessions.Default(c)
user := session.Get("user")
删除session键值
session := sessions.Default(c)
// 删除指定的会话键
session.Delete("user")
// 保存更改
err := session.Save()
if err != nil {
// 处理保存时的错误
return
}
// 删除后的操作
}
完全删除session会话
func logout(c *gin.Context) {
// 清除会话数据
session := sessions.Default(c)
session.Clear()
err := session.Save()
if err != nil {
// 处理保存时的错误
}
// 删除cookie
c.SetCookie("mysession", "", -1, "/", "", false, true)
// 重定向到登录页面或其他页面
c.Redirect(http.StatusFound, "/login")
}