Gin中的Cookie
1 Cookie简介
/*
● HTTP是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用Cookie或者Session实现
● cookie是存储于访问者计算机的浏览器中。可以让我们用同一个浏览器访问同一个域名的时候共享数据。
*/
2 Cookie能实现的功能
/*
1、保持用户登录状态
2、保存用户浏览的历史记录
3、猜你喜欢,智能推荐
4、电商网站的加入购物车
*/
3 设置和获取Cookie
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/cookie", func(c *gin.Context) {
cookie, err := c.Cookie("gin_cookie") // 获取cookie
if err != nil {
cookie = "NotSet"
c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false, true) // 设置cookie
}
fmt.Printf("Cookie value: %s \n", cookie)
})
router.Run()
}
/*
c.SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
name : cookie名称
value : cookie值
maxAge : 过期时间(秒)如果只想设置Cookie的保存路径而不想设置存活时间,可以在第三个参数中传递nil
path : cookie生效的路径
domain : cookie的路径Domain作用域 本地调试配置成localhost,正式上线配置成域名,不写的话就是所有域都可以
secure : 当secure值为true时,cookie在HTTP中是无效的,在HTTPS中才有效
httpOnly : 是微软对COOKIE做的扩展。如果在COOKIE中设置了“httpOnly"属性,则通过程序(JS脚本、applet等)将无法读取到COOKIE信息,防止XSS攻击产生
*/
4 删除Cookie
只需要重新设置过期时间 让它小于0就行了
c.SetCookie("gin_cookie", "test", -1, "/", "localhost", false, true)
5 多个二级域名共享cookie
/*
1.讲二级域名解析
a.xxx.com
b.xxx.com
2、我们想的是用户在a.xxx.com中设置Cookie信息后在 b.xxx.com中获取刚才设置的cookie,也就是实现多个二级域名共享cookie
这时候的话我们就可以这样设置cookie
c.SetCookie("usrename","张三",3600,"/",".xxx.com", false,true)
.xxx.com 让所有属于它的二级域名共享cookie
*/