# 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")
}
更新于

请我喝[茶]~( ̄▽ ̄)~*

Kalice 微信支付

微信支付

Kalice 支付宝

支付宝