Go中cookie的使用

HTTP是无状态的协议,就是说通常情况下,HTTP每次请求都是独立的,服务器几乎没有什么信息可以判断请求是哪个用户发送的。我们的Web应用却经常需要鉴别每次请求的身份,以便做一些个性化操作和资源的保护。

为了客服HTTP的无状态性,引入了用户识别机制,常用的一种机制就是cookie。cookie是一种存储在客户端的信息。一般分为两类:会话cookie和持久cookie,其他的分类都是该两种分类的引申。

  • 会话cookie: 用户退出浏览器则cookie被删除,不设置Expires字段。
  • 持久cookie: 存储在硬盘上,在过期之前仍然有效。

cookie,简而言之就是在本地计算机保存一些用户操作的历史信息(当然包括登录信息),并在用户再次访问该站点时浏览器通过HTTP协议将本地cookie内容发送给服务器,从而完成验证,或继续上一步操作。

cookie工作原理:

image.png

1.1 Go与cookie

Go中cookie结构的定义:

type Cookie struct {
    Name  string
    Value string

    Path       string    
    Domain     string   
    Expires    time.Time 
    RawExpires string    

    // MaxAge=0 表示不设置MaxAge字段,可表示会话cookie
    // MaxAge<0 表示直接删除cookie,可以表示会话cookie
    // MaxAge>0 持久cookie。过期时间为设置的时间
    MaxAge   int
    Secure   bool
    HttpOnly bool
    SameSite SameSite
    Raw      string
    Unparsed []string 
}

设置cookie:

expiration := time.Now()
expiration = expiration.AddDate(1, 0, 0)
cookie := http.Cookie{Name: "cookieid", Value: "123456", Expires: expiration}
http.SetCookie(w, &cookie)

读取cookie:

cookie, _ := r.Cookie("cookieid")
fmt.Fprint(w, cookie)

cookie是存储在客户端的信息,通常常常需要在服务端存储用户的信息,结合cookie验证用户的一些请求。下一节我们介绍服务端的存储机制session。

你可能感兴趣的:(Go中cookie的使用)