การใช้ Cookie ภาษา Go


คุกกี้คือไฟล์ที่เก็บข้อมูลซึ่งเซิร์ฟเวอร์สามารถเขียนไปยังเครื่องของไคลเอนต์ได้ หากไคลเอนต์อนุญาตให้เขียนคุกกี้ได้ ทุกครั้งที่ส่งคำขอไปยังโดเมนใดโดเมนหนึ่ง เว็บเบราว์เซอร์ของไคลเอนต์จะดูว่ามีคุกกี้จากโดเมนนั้นในเครื่องของไคลเอนต์หรือไม่ หากมีคุกกี้ที่เขียนโดยโดเมนนั้น ๆ เบราว์เซอร์จะส่งคุกกี้พร้อมกับทุกคำขอไปยังโดเมนนั้น


ข้อกำหนดเบื้องต้น


ข้อกำหนดสำหรับบทความนี้คือ คุณต้องติดตั้ง Go บนคอมพิวเตอร์ของคุณตามบทความ ติดตั้ง Go และ ทดสอบ Hello World และ คุณคุ้นเคยกับรูปแบบและโครงสร้างของมัน มาก่อน


มีหลายครั้งที่นักพัฒนาซอฟต์แวร์ต้องวางคุกกี้ลงในเบราว์เซอร์ของผู้เยี่ยมชมเว็บไซต์เพื่อพิจารณาว่าผู้เยี่ยมชมรายใดเคยเข้าชมเว็บไซต์มาก่อนหรือไม่ คุณสามารถใช้คุกกี้เพื่อปรับแต่งลักษณะการทำงานของเว็บไซต์ของคุณสำหรับผู้เยี่ยมชมครั้งแรกหรือผู้เยี่ยมชมซ้ำ ตัวอย่างหนึ่งคือการใช้หน้าเข้าสู่ระบบ คุกกี้จะช่วยเว็บไซต์ของคุณในการพิจารณาว่าผู้เยี่ยมชมเป็นผู้เยี่ยมชมครั้งแรกหรือไม่

สำหรับบทช่วยสอนนี้ เราจะเรียนรู้วิธีใช้ 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-/”


และรีเฟรชหน้าอีกครั้ง คราวนี้คุณควรจะเห็นข้อความต้นฉบับอีกครั้ง :



ด้านล่างนี้คือตัวอย่างวิธีการอ่าน เขียน/สร้าง และลบคุกกี้ภายในเว็บเซิร์ฟเวอร์ทั่วไป

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/

Leave a Reply

Your email address will not be published. Required fields are marked *