English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では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(メール送信時は、#を@に変更して報告してください。関連する証拠を提供し、確認された場合、このサイトは即座に侵害を疑われるコンテンツを削除します。)