# cookies
cookies
说白了就是放在浏览器的缓存,服务器通过 setCookies
将应该保存的信息发送给客户端浏览器,客户端收到后将 cookies
进行保存,然后下一次访问该网站时,就把对应的 cookies
放在请求头里发送给客户端。
func Handler(c *gin.Context) { | |
// 获得 cookie | |
s, err := c.Cookie("username") | |
if err != nil { // 说明客户端发送过来的 request 请求头没有携带 cookies,或者没有对应的 value。 | |
s = "wsl" | |
// 设置 cookie | |
c.SetCookie("username", s, 60*60, "/", "180.162.204.156:33787", false, true) | |
} | |
c.String(200, "测试cookie") | |
} |
func (*gin.Context).SetCookie(name string, value string, maxAge int, path string, domain string, secure bool, httpOnly bool) |
注意,这里的 domain
用于指定主机,也就是这个 cookies 在浏览器向某个网站发送请求时,要不要携带这个 Cookies
。
# Sessions
sessions
就是为了维持服务器响应状态的,服务器为访问的客户端开一个 Session
,然后设置这个 Session
的生存时间,并且把这个 Session
对应的 SessionID
通过 setCookies
的方式发送给客户端,这样客户端就把 SessionID
通过 Cookies
形式保存起来了,下一次客户端发送请求时候,就会把这个 Cookies
放在请求头里。客户端收到 Cookies
里对应的 SessionID
,就会提供继续服务状态。
代码:
package main | |
import ( | |
"github.com/gin-contrib/sessions" | |
"github.com/gin-contrib/sessions/cookie" | |
"github.com/gin-gonic/gin" | |
) | |
func main() { | |
r := gin.Default() | |
store := cookie.NewStore([]byte("secret")) | |
r.Use(sessions.Sessions("mysession", store)) | |
r.GET("/hello", func(c *gin.Context) { | |
session := sessions.Default(c) | |
if session.Get("hello") != "world" { | |
session.Set("hello", "world") | |
session.Save() | |
} | |
c.JSON(200, gin.H{"hello": session.Get("hello")}) | |
}) | |
r.Run(":33787") | |
} |