Gin 中的 Cookie
# 1、Cookie 介绍
HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用 Cookie 或者 Session 实现
cookie 是存储于访问者计算机的浏览器中。可以让我们用同一个浏览器访问同一个域名的时候共享数据。
# 2、Cookie 能实现的功能
1、保持用户登录状态
2、保存用户浏览的历史记录
3、猜你喜欢,智能推荐
4、电商网站的加入购物车
# 3、设置和获取 Cookie
https://gin-gonic.com/zh-cn/docs/examples/cookie/ (opens new window)
设置 Cookie
c.SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
第一个参数:key
第二个参数:value
第三个参数:过期时间,如果只想设置 Cookie 的保存路径而不想设置存活时间,可以在第三个参数中传递 nil
第四个参数:cookie 的路径
第五个参数:cookie 的路径 Domain 作用域 本地调试配置成 localhost , 正式上线配置成域名
第六个参数是:secure ,当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效
第七个参数:httpOnly,是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通过程序(JS 脚本、applet 等)将无法读取到 COOKIE 信息,防止 XSS 攻击产生
获取 Cookie
cookie, err := c.Cookie("name")
完整 demo
package main
import (
"github.com/gin-gonic/gin"
"html/template"
"test6/models"
)
func main() {
r := gin.Default()
r.SetFuncMap(template.FuncMap{"unixToDate": models.UnixToDate})
r.GET("/", func(c *gin.Context) {
c.SetCookie("usrename", "张三", 3600, "/", "localhost", false, true)
c.String(200, "首页")
})
r.GET("/user", func(c *gin.Context) {
username, _ := c.Cookie("usrename")
c.String(200, "用户-"+username)
})
r.Run(":9090")
}
# 4 、多个二级域名共享 cookie
1、分别把 a.itying.com 和 b.itying.com 解析到我们的服务器
2、我们想的是用户在 a.itying.com 中设置 Cookie 信息后在 b.itying.com 中获取刚才设置的 cookie,也就是实现多个二级域名共享 cookie
这时候的话我们就可以这样设置 cookie
c.SetCookie("usrename", "张三", 3600, "/", ".itying.com", false, true)