English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Go言語のCookieの使用法分析

この記事ではGo言語のCookieの使い方について説明しています。皆さんに参考にしていただければ幸いです。以下の通りです:

web開発では cookie とやり取りすることは避けられません。Goのhttpライブラリもcookieの関連操作を提供しています。

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
}

Name フィールドは cookie の名前、Value はその値であり、残りの Path と Domain は cookie の保存範囲です。Expires は cookie の有効期限であり、設定しない場合、これはセッション型の cookie であり、ブラウザのセッションが有効であり、ブラウザを閉じると cookie が即座に削除されます。

Cookie の設定

cookie は header の一部内容であり、したがって response の Header メソッドを使用して cookie を設定することができます。

func setCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1 := http.Cookie{
        Name: "first_cookie",
        Value: "vanyar",
        HttpOnly: true,
    }
    c2 := http.Cookie{
        Name: "second_cookie",
        Value: "noldor",
        HttpOnly: true,
    }
    w.Header().Set("Set-Cookie", c1.String())
    w.Header().Add("Set-Cookie", c2.String())
}

ここでも Set と Add の二つのメソッドの違いをテストすることができます。もちろん、ファイルアップロードと同様に、Go は一般的なツール関数を提供しています。

http.SetCookie(w, &c1)
http.SetCookie(w, &c2)

http の SetCookie メソッドも cookie を設定できますので、Set と Add の順序に関心がありません。もちろん、第二引数は Cookie のポインターオブジェクトです。cookie を設定したら、次に cookie を読み取る必要があります。

Cookie の読み取り

cookie の読み取り方法も多く、cookie は header 内に含まれており、header メソッドを使用して処理することができます。

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    h := r.Header["Cookie"]
    fmt.Fprintln(w, h)
}

Header メソッドを使用しなくても、Request のメソッドを使用することもできます:

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1, err := r.Cookie("first_cookie")
    if err != nil{
        fmt.Fprintln(w, "cookie を取得できませんでした")
    }
    cs := r.Cookies()
    fmt.Fprintln(w, c1)
    fmt.Fprintln(w, cs)
}

アクセスすると、r.Cookie は key のキーと値のペアを返し、r.Cookies はすべての cookie の key のキーと値のペアを返します。

Cookie と メッセージ

cookie の役割は多く、通常クライアントの情報を記録し、ユーザーのログイン認証に使用されます。今、cookie を使用して小さな機能を実装する必要があります。---メッセージ。通常 web 请求が送信された後、response がデータを返し、ユーザーを参照するためのメッセージを設定することもあります。

func setMessageHandler(w http.ResponseWriter, r *http.Request) {
    msg := []byte("Hello World")
    c := http.Cookie{
        Name: "flash",
        Value:base64.URLEncoding.EncodeToString(msg),
    }
    http.SetCookie(w, &c)
}
func getMessageHandler(w http.ResponseWriter, r *http.Request) {
    c, err := r.Cookie("flash")
    if err != nil {
        if err == http.ErrNoCookie {
            fmt.Fprintln(w, "メッセージが見つかりませんでした")
        }
    } else {
        rc := http.Cookie{
            Name: "flash",
            MaxAge: -1,
            Expires:time.Unix(1, 0),
        }
        http.SetCookie(w, &rc)
        val, _ := base64.URLEncoding.DecodeString(c.Value)
        fmt.Fprintln(w, string(val))
    }
}

setMessageHandler関数は非常にシンプルで、cookieインスタンスを作成し、メッセージをcookieに書き込み、それをクライアントに返します。

getMessageHandlerはまず、keyがflashのcookieを読み取ります。内容が読み取れなかった場合は、メッセージが存在しないことを示し、別のcookieを作成し、その有効期限を設定してクリアします。その後、読み取ったmessageをクライアントに返します。メッセージ通信を完了します。

まとめ

Goでのcookieの基本的な使用方法について議論しました。現在のウェブ開発では、ますます多くの人がネットワークのセキュリティに注目しており、cookieのセキュリティもユーザーが関心を持つ内容です。Goのオブジェクトのcookieパッケージは比較的シンプルです。しかし、Goのコミュニティは多くの「ワゴン」を開発し、secure cookieを実現しています。例えば、gorilla/securecookie ライブラリ。実際の開発では、機能を完了するために外部のライブラリやパッケージを利用することがあります。

この記事で述べたことが、皆さんのGo言語プログラミングに役立つことを願っています。

声明:この記事の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーによって自発的に提供され、アップロードされました。このサイトは所有権を持ちません。また、人間による編集は行われていません。著作権侵害を疑う内容が見つかった場合は、メールを送信してください:notice#oldtoolbag.com(メール送信時は、#を@に変更して報告してください。関連する証拠を提供し、確認された場合、このサイトは即座に侵害を疑われるコンテンツを削除します。)

おすすめ