日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Go] Cookie 使用简介

發布時間:2025/3/21 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Go] Cookie 使用简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Golang 的 Cookie

web 開發免不了要和 cookie 打交道。Go 的 http 庫也提供了 cookie 的相關操作。

type Cookie struct {Name stringValue stringPath stringDomain stringExpires time.TimeRawExpires stringMaxAge intSecure boolHttpOnly boolRaw stringUnparsed []string }

Name 字段為 cookie 的名字,Value 是其值,剩下的 Path 和 Domain 則是 cookie 的存儲的范圍。Expires 是 cookie 的過期時間,如果不設置,那么這是一個 session 型的 cookie,即瀏覽器會話有用,一旦關閉瀏覽器,cookie 隨即會被刪除。

設置 Cookie

cookie 是 header 一項內容,因此可以使用 reponse 的 Header 方法設置 cookie。

func setCookieHandler(w http.ResponseWriter, r *http.Request) {c1 := http.Cookie{Name: "first_cookie",Value: "vanyar",HttpOnly: true,}c2 := http.Cookie{Name: "second_cookie",Value: "noldor",HttpOnly:true,}w.Header().Set("Set-Cookie", c1.String())w.Header().Add("Set-Cookie", c2.String()) }

cookie.png

這里也可以測試驗證 Set 和 Add 兩個方法的差別。當然,和文件上傳類似,Go 也提供了常用的工具函數。

http.SetCookie(w, &c1) http.SetCookie(w, &c2)

http 的 SetCookie 方法也可以設置 cookie,就不需要關系 Set 和 Add 的先后順序了,當然第二個參數是一個 Cookie 的指針對象。設置了 cookie,接下來就是需要讀 cookie。

讀取 Cookie

讀取 cookie 的方式也有很多,cookie 封裝在header中,當然可以通過 header 方法處理。

func getCookieHandler(w http.ResponseWriter, r *http.Request) {h := r.Header["Cookie"]fmt.Fprintln(w, h) }

不使用 Header 方法,也可以使用 Request 的方法:

func getCookieHandler(w http.ResponseWriter, r *http.Request) {c1, err := r.Cookie("first_cookie")if err != nil{fmt.Fprintln(w, "Cannot get cookie")}cs := r.Cookies()fmt.Fprintln(w, c1)fmt.Fprintln(w, cs) }

訪問的時候可以發現,r.Cookie 返回了對于 key 的鍵值對,而 r.Cookies 則返回了所有 cookie 的 key 的鍵值對值。

Cookie 與 消息

cookie 的作用很多,通常記錄客戶端的一些信息,用來做用戶的登錄驗證。現在我們需要使用 cookie 來做一個小特性---消息。通常 web 請求發出后,response 返回數據,也可以設置一些消息用來指引用戶。

func setMessageHandler(w http.ResponseWriter, r *http.Request) {msg := []byte("Hello World")c := http.Cookie{Name: "flash",Value:base64.URLEncoding.EncodeToString(msg),}http.SetCookie(w, &c) }func getMessageHandler(w http.ResponseWriter, r *http.Request) {c, err := r.Cookie("flash")if err != nil {if err == http.ErrNoCookie {fmt.Fprintln(w, "No message found")}} else {rc := http.Cookie{Name: "flash",MaxAge: -1,Expires:time.Unix(1, 0),}http.SetCookie(w, &rc)val, _ := base64.URLEncoding.DecodeString(c.Value)fmt.Fprintln(w, string(val))} }

setMessageHandler 函數很簡單,就是創建一個 cookie 實例,然后把消息寫入到 cookie,然后再返回給客戶端。

getMessageHandler 首先會讀取 key 為 flash 的 cookie,如果沒讀到內容,則表示消息不存在,否則就創建另外一個 cookie,設置其過期時間這里等于清除 cookie。然后把讀取出來的 message 返回給客戶端。完成消息通信。

總結

我們討論了 Go 中 cookie 的基本應用。現在的 web 開發中,人們越來越重視網絡安全,因此 cookie 的安全也成為用戶關心的內容。Go 原生的 cookie 封裝比較簡單。Go 的社區卻開發了很多輪子,實現了secure cookie,例如 gorilla/securecookie 庫。實際開發中,可能會借助一些三方的庫或包來完成功能。

總結

以上是生活随笔為你收集整理的[Go] Cookie 使用简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。