HTTP merupakan stateless antara client dan server, artinya server tidak menyimpan data apapun untuk mengingat tiap request dari client. Hal ini bertujuan agar mudah melakukan scalability di sisi server.
Lantas bagaimana caranya agar server bisa mengingat sebuah client? Misal ketika kita sudah login di website, server otomatis harus tau jika client tersebut sudah login, sehingga request selanjutnya tidak perlu diminta untuk login lagi. Untuk melakukan hal ini kita bisa memanfaatkan Cookie.
Cookie
Cookie adalah fitur HTTP dimana server bisa memberi response cookie(key-value) dan client akan menyimpan cookie tersebut di web browser. Request selanjutnya, client akan selalu membawa cookie tersebut secara otomatis. Dan server secara otomatis akan selalu menerima data cookie yang dibawa oleh client setiap kali client mengirim request.
Membuat cookie
Cookie merupakan data yang dibuat di server dan sengaja agar disimpan di web browser, untuk membuat cookie di server, kita bisa menggunakan function http.SetCookie()
Buat file baru dengan nama cookie_test.go
, kemudian masukkan baris kode berikut ini :
package belajar_golang_web
import (
"fmt"
"net/http"
)
func SetCookie(writer http.ResponseWriter, request *http.Request) {
cookie := new(http.Cookie)
cookie.Name = "X-Name"
cookie.Value = request.URL.Query().Get("name")
cookie.Path = "/"
http.SetCookie(writer, cookie)
fmt.Fprint(writer, "Success create cookie")
}

Mengambil cookie
func GetCookie(writer http.ResponseWriter, request *http.Request) {
cookie, err := request.Cookie("X-Name")
if err != nil {
fmt.Fprint(writer, "No Cookie")
} else {
fmt.Fprintf(writer, "Hello %s", cookie.Value)
}
}

Untuk mengambil cookie, bisa kita lakukan melalui request seperti contoh diatas. Untuk mencoba dan melihat cara kerjanya, buat unit test baru yang me runnging server mux, seperti berikut
func TestCookie(t *testing.T) {
mux := http.NewServeMux()
mux.HandleFunc("/set-cookie", SetCookie)
mux.HandleFunc("/get-cookie", GetCookie)
server := http.Server{
Addr: "localhost:8080",
Handler: mux,
}
err := server.ListenAndServe()
if err != nil {
panic(err)
}
}

Penutup
Pada artikel kali ini kita telah belajar tentang cookie pada golang web. Dan pada artikel selanjutnya saya akan membahas file server pada golang web.