1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Goでクッキーをブラウザに渡したり取得したりしてみる

Last updated at Posted at 2020-07-14

Goの標準パッケージを使ってクッキーの操作をやってみました。

#クッキーをブラウザに渡す
コードはこんな感じです。

main.go
package main

import (
	"net/http"
	"log"
)

func setCookie(w http.ResponseWriter,r *http.Request){
	c1:=http.Cookie{
		Name: "cookie1",
		Value:"Hello World!",
		HttpOnly: true,
	}
	c2:=http.Cookie{
		Name:"cookie2",
		Value:"Hello Quita!",
	}
	http.SetCookie(w,&c1)
	http.SetCookie(w,&c2)
}

func main(){
	http.HandleFunc("/set_cookie",setCookie)
	log.Fatal(http.ListenAndServe(":8080",nil))
}

実行して localhost:8080/set_cookie をブラウザで開くと一見なにも変化がないこのような画面になります。
スクリーンショット 2020-07-13 20.41.59.png

しかし、Chromeの検証でApplication>Storage>Cookiesを見るとこのようにクッキーがブラウザに渡せていることがわかります。
次は逆に渡したクッキーをブラウザから取得し、画面に出力してみます。
スクリーンショット 2020-07-13 20.44.41.png

##クッキーをブラウザから取得
コードはこちらです。

main.go

package main

import (
	"fmt"
	"log"
	"net/http"
)

func getCookie(w http.ResponseWriter,r *http.Request){
	//名前が"coockie1"であるクッキーを取得
	c1,err:=r.Cookie("cookie1")
	if err!=nil{
		log.Fatal(err)
	}

	//c1を出力
	fmt.Fprintln(w,c1)

	//クッキーをスライスで全取得
	cSlice:=r.Cookies()

	//cSliceを出力
	fmt.Fprintln(w,cSlice)


}

func main(){
	http.HandleFunc("/get_cookie",getCookie)
	log.Fatal(http.ListenAndServe(":8080",nil))
}

http://localhost:8080/get_cookie にアクセスするとこのように先ほどブラウザに渡したクッキーを取得できていることがわかります。
メソッドCoockies()はすべてのクッキーをスライス形で返します。
スクリーンショット 2020-07-13 21.06.12.png

##参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?