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")
}