35--go语言学习之session操作

  1.  下载
    go get github.com/gin-contrib/sessions
  2.  代码
    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
    }
    
  3.  测试
    1  获取用户信息  http://127.0.0.1:9008/info?name=admin
      
     2 用户登陆
      
     
    3 再次获取用户信息 
      
  4.  完成
     

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值