HTTPレスポンスにCookieを設定する
Goで書いたサーバ側で、HTTPレスポンスヘッダのSet-Cookieフィールドを記述する。
コードは以下。
// 1 cookie := &http.Cookie{ Name: "hoge", // ここにcookieの名前を記述 Value: "bar", // ここにcookieの値を記述 } // 2 http.SetCookie(w, cookie)
手順は、以下の通り
1. httpパッケージのtype Cookieのフィールドを設定する
2. httpパッケージのsetCookie関数の引数にResponseWriterとCookieを渡す
-> HTTPレスポンスヘッダのSet-CookieにCookieで追加したものが設定される
なお、NameやValue以外にもrfc6265に準拠した様々なフィールドを設定できる
cookieで設定できるフィールドは、以下のhttpパッケージのtype Cookieの限りである(公式より引用)
type Cookie struct { Name string Value string Path string // optional Domain string // optional Expires time.Time // optional RawExpires string // for reading cookies only // MaxAge=0 means no 'Max-Age' attribute specified. // MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0' // MaxAge>0 means Max-Age attribute present and given in seconds MaxAge int Secure bool HttpOnly bool Raw string Unparsed []string // Raw text of unparsed attribute-value pairs }
(引用元 https://golang.org/pkg/net/http/#Cookie)
HTTPリクエストからCookieを取得する
Goで書いたサーバ側で、クライアントからのHTTリクエストのヘッダに記述されているSet-Cookieフィールドを取得する。
コードは以下。
// 1 cookie, err := r.Cookie("hoge") if err != nil { log.Fatal("Cookie: ", err) } // 2 v := cookie.Value fmt.Println(v)
実装してみる
実際にGoでcookieの設定と取得を行ってみる。
main.go
package main import ( "net/http" "fmt" "log" "html/template" ) // cookieの設定を行う func setCookies(w http.ResponseWriter, r *http.Request) { cookie := &http.Cookie{ Name: "hoge", Value: "bar", } http.SetCookie(w, cookie) fmt.Fprintf(w, "Cookieの設定ができたよ") } // cookieの取得を行い、htmlを返す func showCookie(w http.ResponseWriter, r *http.Request) { cookie, err := r.Cookie("hoge") if err != nil { log.Fatal("Cookie: ", err) } tmpl := template.Must(template.ParseFiles("./cookie.html")) tmpl.Execute(w, cookie) } // メイン func main() { http.HandleFunc("/", setCookies) http.HandleFunc("/cookie", showCookie) if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal("ListenAndServe: ", err) } }
テンプレートは以下の通り
cookie.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>cookie</title> </head> <body> <p>cookieの値は</p> <p> name: {{.Name}} </p> <p> value:{{.Value}} </p> </body> </html>
cookieの確認の仕方
蛇足だが、chromeのdeveloper toolsのApplication-> Cookiesでcookieを確認できる
参考にさせていただいたサイト
https://golang.org/pkg/net/http/
※ Qiitaでも同一記事を投稿している qiita.com