http 是無狀態的,每個連線都是獨立的,
為了識別 Client 的狀況,在 Client 端留下訊息,
在每次的連線中,讓 Server 可以取得 Client 的狀態,
在 Golang 裡處理 cookie
package main
import (
"fmt"
"net/http"
)
func setCookie(w http.ResponseWriter, r *http.Request) {
c := http.Cookie{
Name: "cookie_name",
Value: "cookie_status",
HttpOnly: true,
}
http.SetCookie(w, &c)
}
func getCookie(w http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("cookie_name")
if err != nil {
fmt.Fprintln(w, "Cannot get cookie")
}
cs := r.Cookies()
fmt.Fprintln(w, c)
fmt.Fprintln(w, cs)
}
func main() {
server := http.Server{
Addr: "127.0.0.1:8080",
}
http.HandleFunc("/cookie/set", setCookie)
http.HandleFunc("/cookie/get", getCookie)
server.ListenAndServe()
}
在方法 setCookie 中,先用 http.Cookie 產生 Cookie,
使用 http.SetCookie 將 Cookie 寫進連線中
而在方法 getCookie 中使用 http.Request.Cookie 取得特定的 Cookie
使用 http.Request.Cookies 取得連線上全部的 Cookie