本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Gin 中的Cookie
## cookie 概述 1、HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用Cookie 或者Session实现。 2、● cookie 是存储于访问者计算机的浏览器中。可以让我们用同一个浏览器访问同一个域名的时候共享数据。 ## cookie一般用来做什么? 1、在同一个项目中,更多的是需要保持其登录状态的!,cookie一般就是用来做这个。 2、cookie还会保存记得浏览器浏览记录 3、使用智能推荐算法,猜你喜欢 4、类似的购物车功能
## 设置和获取 Cookie ### 设置cookie
go c.SetCookie(name, value string, maxAge int, path, domain string, secure bool, httpOnly bool)
1、name:相当于key
2、value
3、maxAge:过期时间。如果不想设置,则为nil
4、path:cookie的路径
5:domain :cookie 的路径 Domain 作用域,如果是本地调试配置成 localhost , 正式上线则配置成域名
6、secure:,当 secure 值为 true 时,cookie 在 HTTP 中是无效,在HTTPS 中才有效
7、httpOnly:是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通过程序(JS 脚本、applet 等)将无法读取到 COOKIE 信息,防止XSS 攻击产生
获取cookie
go cookie, err := c.Cookie("name")
在路由中的应用
```go r.GET("/login", 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) }) ```
多个二级域名共享 cookie
1、分别把 a.abc.com 和 b.abc.com 解析到我们的服务器
2、我们想的是用户在 a.abc.com 中设置 Cookie 信息后在 b.abc.com 中获取刚才设置的cookie,也就是实现多个二级域名共享 cookie
设置二级域名cookie
go c.SetCookie("usrename", "张三", 3600, "/", ".abc.com", false,)
只需把path写模糊就行了