Golang Gin Session & Cookie

发布时间 2023-11-24 19:35:09作者: 看一百次夜空里的深蓝

一. Cookie

 1 func (con UserControl) Index(c *gin.Context) {
 2     /*** 设置Cookie
 3         func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool) {
 4         参数:
 5             1. name       key
 6             2. value    value
 7             3. maxAge    过期时间(秒).如果只是想设置Cookie的保存路进而不详设置存活时间,可以在直接传nil,-1就是删除Cookie.
 8             4. path        Cookie的路径. "/"表示当前域都可以访问
 9             5. domain    Cookie路径Domain作用域.本地配制成localhost,正式上限配制成域名
10             6. secure    当为true时,cookie在http中是无效的,在https才有效
11             7. httpOnly    是微软堆cookie做的拓展. 如果在cookie中设置了true,则通过程序(JS脚本\applet等)将无法读取道Cookie信息,防止XSS攻击
12     ***/
13     c.SetCookie("username", "zhangsan", 3600, "/", "localhost", false, false)
14     // 获取cookie
15     username, _ := c.Cookie("username")
16     fmt.Println(username)
17     c.String(http.StatusOK, "用户列表-首页")
18 }

二. Session

 1 # Session 库: https://github.com/gin-contrib/sessions
 2 # 安装: go get github.com/gin-contrib/sessions
 3 
 4 package main
 5 
 6 import (
 7   "github.com/gin-contrib/sessions"
 8   "github.com/gin-contrib/sessions/cookie"
 9   "github.com/gin-gonic/gin"
10 )
11 
12 func main() {
13   r := gin.Default()
14   store := cookie.NewStore([]byte("secret"))
15   r.Use(sessions.Sessions("mysession", store))
16 
17   r.GET("/incr", func(c *gin.Context) {
18     session := sessions.Default(c)
19     var count int
20     v := session.Get("count")
21     if v == nil {
22       count = 0
23     } else {
24       count = v.(int)
25       count++
26     }
27     session.Set("count", count)
28      // 可以保存在:内存/Redis/MongoDB/PostgreSQL  具体需要在初始化中间件的时候设置.   
29     session.Save()
30     c.JSON(200, gin.H{"count": count})
31   })
32   r.Run(":8000")
33 }