Go中cookie的使用

HTTP是無狀態(tài)的協(xié)議,就是說通常情況下,HTTP每次請求都是獨立的,服務(wù)器幾乎沒有什么信息可以判斷請求是哪個用戶發(fā)送的。我們的Web應(yīng)用卻經(jīng)常需要鑒別每次請求的身份,以便做一些個性化操作和資源的保護。

為了客服HTTP的無狀態(tài)性,引入了用戶識別機制,常用的一種機制就是cookie。cookie是一種存儲在客戶端的信息。一般分為兩類:會話cookie和持久cookie,其他的分類都是該兩種分類的引申。

  • 會話cookie: 用戶退出瀏覽器則cookie被刪除,不設(shè)置Expires字段。
  • 持久cookie: 存儲在硬盤上,在過期之前仍然有效。

cookie,簡而言之就是在本地計算機保存一些用戶操作的歷史信息(當然包括登錄信息),并在用戶再次訪問該站點時瀏覽器通過HTTP協(xié)議將本地cookie內(nèi)容發(fā)送給服務(wù)器,從而完成驗證,或繼續(xù)上一步操作。

cookie工作原理:

image.png

1.1 Go與cookie

Go中cookie結(jié)構(gòu)的定義:

type Cookie struct {
    Name  string
    Value string

    Path       string    
    Domain     string   
    Expires    time.Time 
    RawExpires string    

    // MaxAge=0 表示不設(shè)置MaxAge字段,可表示會話cookie
    // MaxAge<0 表示直接刪除cookie,可以表示會話cookie
    // MaxAge>0 持久cookie。過期時間為設(shè)置的時間
    MaxAge   int
    Secure   bool
    HttpOnly bool
    SameSite SameSite
    Raw      string
    Unparsed []string 
}

設(shè)置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是存儲在客戶端的信息,通常常常需要在服務(wù)端存儲用戶的信息,結(jié)合cookie驗證用戶的一些請求。下一節(jié)我們介紹服務(wù)端的存儲機制session。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容