[GO] GO를 사용하여 쿠키로 FlashMessage 만들기

14649 단어 5쿠키

1. 쿠키 만들기



먼저 쿠키를 만듭니다.
func setMessage(w http.ResponseWriter, r *http.Request) {
    msg := []byte("Hello World")
   //ヘッダ内ではクッキーの値をURLエンコードする必要があるらしい
    c := http.Cookie{
      Name:   "Qiita",
      Value: base64.URLEncoding.EncodeToString(msg),
    HttpOnly: true
    }
    http.SetCookie(w, &c)
}

2. 쿠키를 기반으로 플래시 메시지 만들기


func showMessage(w http.ResponseWriter, r *http.Request){
   //構造体Requestの中には名前付きクッキーを取り出せるCookieメソッドがある。
  //Name: "Qiita"のクッキーを探す、ない場合はerrにエラー文が入る。
    c, err := r.Cookie("Qiita")
    if err != nil {
        if err == http.ErrNoCookie{
            fmt.Fprintln(w, "メッセージがありません")
            //fmt.Fprintln(w, err)
            //エラー文が見たい人は上のコメントアウト外してみて
        }
    } else {
        rc := http.Cookie{
            Name: "Qiita",
            MaxAge: -1,
            Expires: time.Unix(1,0),
        }
        http.SetCookie(w, &rc)
        val, _ := base64.URLEncoding.DecodeString(c.Value)
        fmt.Fprintln(w, string(val))
    }
}

3. 만든 핸들러 함수(showMessage, setMessage)를 핸들러로 변환, 멀티플렉서에 뿌린다


func main() {

    server := http.Server{
        Addr: "127.0.0.1:8080",
    }
    http.HandleFunc("/set_message", setMessage)
    http.HandleFunc("/show_message", showMessage)

    server.ListenAndServe()
}

완성형



main.go
package main

import (
"encoding/base64"
"fmt"
"net/http"
"time"
)

func setMessage(w http.ResponseWriter, r *http.Request){
    msg := []byte("Hello World")
    c := http.Cookie{
        Name: "Qiita",
        Value: base64.URLEncoding.EncodeToString(msg),
    }
    http.SetCookie(w, &c)
}


func showMessage(w http.ResponseWriter, r *http.Request){
    //名前付きクッキーを取り出すメソッドCookie、指定したクッキーがないときエラーを返す
    c, err := r.Cookie("Qiita")

    //Name: "cookie"のcookieの構造体が存在しないとエラー文"http: named cookie not present"が送られてくる。
    if err != nil {
        if err == http.ErrNoCookie{
            fmt.Fprintln(w, "メッセージがありません")
            fmt.Fprintln(w, err)
        }
    } else {
        rc := http.Cookie{
            Name: "Qiita",
            MaxAge: -1,
            Expires: time.Unix(1,0),
        }
        http.SetCookie(w, &rc)
        val, _ := base64.URLEncoding.DecodeString(c.Value)
        fmt.Fprintln(w, string(val))
    }
}

func main() {
    server := http.Server{
        Addr: "127.0.0.1:8080",
    }

    http.HandleFunc("/set_message", setMessage)
    http.HandleFunc("/show_message", showMessage)

    server.ListenAndServe()
}

검증



먼저 빌드
$go build main.go
$./main
http://127.0.0.1.8080/set_message 를 열어보세요.
Chrome 검증 기능을 사용하여 쿠키가 만들어 졌음을 확인할 수 있습니다.



그런 다음 http://127.0.0.1:8080/show_message 를 열어보십시오.

Hello World



그리고 나왔습니까?



검증 기능을 사용하면 쿠키가 사라지고 있음을 알 수 있습니다.

마지막으로 쿠키의 구조체 (모델) 올려 둡니다 ~



Cookie_struct.go
type Cookie struct{
 Name:           string
 Value:          string
 Path:           string
 Domain:         string
 Expires:        time.Time
 RawExpires:     string
 MaxAge:         int
 Secure:         bool
 HttpOnly:       bool
 Raw:            string
 Unparsed:       []string
}

좋은 웹페이지 즐겨찾기