การใช้ Cookie ภาษา Go
คุกกี้ (cookie) คืออะไร?
คุกกี้คือไฟล์ที่เก็บข้อมูลซึ่งเซิร์ฟเวอร์สามารถเขียนไปยังเครื่องของไคลเอนต์ได้ หากไคลเอนต์อนุญาตให้เขียนคุกกี้ได้ ทุกครั้งที่ส่งคำขอไปยังโดเมนใดโดเมนหนึ่ง เว็บเบราว์เซอร์ของไคลเอนต์จะดูว่ามีคุกกี้จากโดเมนนั้นในเครื่องของไคลเอนต์หรือไม่ หากมีคุกกี้ที่เขียนโดยโดเมนนั้น ๆ เบราว์เซอร์จะส่งคุกกี้พร้อมกับทุกคำขอไปยังโดเมนนั้น
ข้อกำหนดเบื้องต้น
ข้อกำหนดสำหรับบทความนี้คือ คุณต้องติดตั้ง Go บนคอมพิวเตอร์ของคุณตามบทความ ติดตั้ง Go และ ทดสอบ Hello World และ คุณคุ้นเคยกับรูปแบบและโครงสร้างของมัน มาก่อน
Read, Write(Create) and Delete Cookie
มีหลายครั้งที่นักพัฒนาซอฟต์แวร์ต้องวางคุกกี้ลงในเบราว์เซอร์ของผู้เยี่ยมชมเว็บไซต์เพื่อพิจารณาว่าผู้เยี่ยมชมรายใดเคยเข้าชมเว็บไซต์มาก่อนหรือไม่ คุณสามารถใช้คุกกี้เพื่อปรับแต่งลักษณะการทำงานของเว็บไซต์ของคุณสำหรับผู้เยี่ยมชมครั้งแรกหรือผู้เยี่ยมชมซ้ำ ตัวอย่างหนึ่งคือการใช้หน้าเข้าสู่ระบบ คุกกี้จะช่วยเว็บไซต์ของคุณในการพิจารณาว่าผู้เยี่ยมชมเป็นผู้เยี่ยมชมครั้งแรกหรือไม่
สำหรับบทช่วยสอนนี้ เราจะเรียนรู้วิธีใช้ http.SetCookie() ฟังก์ชันเพื่อวางคุกกี้ให้กับผู้เยี่ยมชมเว็บไซต์
นี่คือตัวอย่างโค้ดวิธีเปลี่ยนข้อความเว็บไซต์โดยขึ้นอยู่กับการประทับเวลาภายในคุกกี้ของผู้เข้าชม
package main
import (
"net/http"
"strconv"
"time"
)
func home(w http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("timevisited") //
expire := time.Now().AddDate(0, 0, 1)
cookieMonster := &http.Cookie{
Name: "timevisited",
Expires: expire,
Value: strconv.FormatInt(time.Now().Unix(), 10),
}
http.SetCookie(w, cookieMonster)
if err != nil {
w.Write([]byte("Welcome! first time visitor!"))
} else {
lasttime, _ := strconv.ParseInt(c.Value, 10, 0)
html := "Hey! Hello again!, your last visit was at "
html = html + time.Unix(lasttime, 0).Format("15:04:05")
w.Write([]byte(html))
}
}
func main() {
http.HandleFunc("/", home)
http.ListenAndServe(":8080", nil)
}
เรียกใช้โค้ดด้านบนและชี้เบราว์เซอร์ของคุณไปที่ http://localhost:8080 และคุณควรเห็นข้อความนี้ Welcome! first time visitor! ในครั้งแรก :
รีเฟรชหน้าอีกครั้ง และคราวนี้คุณจะเห็นข้อความนี้ :
หากคุณใช้เบราว์เซอร์ Firefox คลิกขวาแล้วไปที่ Inspect
เลือก Storang -> Cookies -> http://localhost:8080 -> คลิกขวาที่คุกกี้ชื่อ timevisited -> Delete “timevisited-localhost-/”
และรีเฟรชหน้าอีกครั้ง คราวนี้คุณควรจะเห็นข้อความต้นฉบับอีกครั้ง :
Drop cookie to visitor’s
ด้านล่างนี้คือตัวอย่างวิธีการอ่าน เขียน/สร้าง และลบคุกกี้ภายในเว็บเซิร์ฟเวอร์ทั่วไป
package main
import (
"net/http"
)
func SayHelloWorld(w http.ResponseWriter, r *http.Request) {
html := "Hello World! "
w.Write([]byte(html))
}
func ReadCookie(w http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("ithinkidroppedacookie")
if err != nil {
w.Write([]byte("error in reading cookie : " + err.Error() + "\n"))
} else {
value := c.Value
w.Write([]byte("cookie has : " + value + "\n"))
}
}
func DeleteCookie(w http.ResponseWriter, r *http.Request) {
c := http.Cookie{
Name: "ithinkidroppedacookie",
MaxAge: -1}
http.SetCookie(w, &c)
w.Write([]byte("old cookie deleted!\n"))
}
func CreateCookie(w http.ResponseWriter, r *http.Request) {
c := http.Cookie{
Name: "ithinkidroppedacookie",
Value: "thedroppedcookiehasgoldinit",
MaxAge: 3600}
http.SetCookie(w, &c)
w.Write([]byte("new cookie created!\n"))
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", SayHelloWorld)
mux.HandleFunc("/readcookie", ReadCookie)
mux.HandleFunc("/deletecookie", DeleteCookie)
mux.HandleFunc("/createcookie", CreateCookie)
http.ListenAndServe(":8080", mux)
}
ตอนนี้ เพื่อดูว่าคุกกี้ถูกสร้างขึ้น อ่าน และลบอย่างไร คุณต้องทำตามลำดับนี้
เรียกใช้โปรแกรมและชี้เว็บเบราว์เซอร์ของคุณไปที่ localhost:8080
เปลี่ยน URL localhost:8080/createcookie เพื่อสร้างคุกกี้ใหม่
หากคุณดูด้วยเบราว์เซอร์ Firefox ให้เปิดตัวตรวจสอบเพื่อดูค่าคุกกี้
อ่านคุกกี้โดยเปลี่ยนเป็น localhost:8080/readcookie
สุดท้าย ให้ลบคุกกี้โดยเปลี่ยนเป็น localhost:8080/deletecookie
เปิดตัวตรวจสอบเพื่อดูค่าคุกกี้
credit : https://www.socketloop.com/