以下の内容はhttps://tech-up.hatenablog.com/entry/2019/01/06/175112より取得しました。


Cookieに使える、base64エンコード【Go】

CookieJSONの内容を格納する際などは、base64を用いて事前にエンコードし、Cookieから取り出した後にデコードします。
Cookieには許容されない文字を使うと、Cookieにそもそも登録できない、または異なるValueの値が登録されてしまうからです。

func main() {
    http.HandleFunc("/", foo)
    http.Handle("/favicon.ico", http.NotFoundHandler())
    http.ListenAndServe(":8080", nil)
}

func foo(w http.ResponseWriter, req *http.Request) {
    s := ";≠|:;"    // エンコードしないと、意図した内容をCookieに登録できない
    s64Value := base64.StdEncoding.EncodeToString([]byte(s))

    http.SetCookie(w, &http.Cookie{
        Name:  "session",
        Value: s64Value,    // エンコードした内容を登録
    })

    c, _ := req.Cookie("session")
    ds, _ := base64.StdEncoding.DecodeString(c.Value)    // デコード
    fmt.Println(string(ds))    // byte配列からstringにキャストすると、「;≠|:;」と出力される
}


ほとんどないことかもしれませんが、CookieのNameには「=」を使用できません。
base64のStdEncodingは「=」を含んでしまうため、CookieのNameもエンコードしたい場合、RawStdEncodingを使う必要があります。

s64Value := base64.RawStdEncoding.EncodeToString([]byte(s))    // 「=」(padding)が含まれないようにエンコードされる


Set-Cookie | MDN




以上の内容はhttps://tech-up.hatenablog.com/entry/2019/01/06/175112より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14