クッキーの紹介
- HTTP はステートレス プロトコルであるため、サーバーはブラウザのアクセス ステータスを記録できません。つまり、サーバーは 2 つのリクエストが同じクライアントから発行されたものであるかどうかを区別できません。
- Cookie は HTTP プロトコルのステートレス性を解決するソリューションの 1 つで、中国語で Cookie を意味します。
- Cookie は、実際にはサーバーによってブラウザーに保存される情報の一部です。ブラウザが Cookie を取得すると、サーバーにリクエストを送信するたびにこの情報がサーバーに送信され、サーバーはリクエストを受信した後、この情報に基づいてリクエストを処理できます。
- Cookie はサーバーによって作成され、ブラウザに送信され、最終的にブラウザによって保存されます。
Cookieの使用目的
- テスト サーバーはクライアントに Cookie を送信し、クライアントはリクエストを行うときに Cookie を保持します。
クッキーの使用
-
クッキーの取得:
func (c *Context) Cookie(name string) (string, error)
Cookie は、リクエストで指定された名前付き Cookie を返します。見つからない場合は ErrNoCookie を返します。そして、指定された Cookie をエスケープせずに返します。複数の Cookie が指定された名前と一致する場合、1 つの Cookie のみが返されます。
- クッキー設定:
func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
SetCookie Set-Cookie ヘッダーを ResponseWriter のヘッダーに追加します。提供される Cookie には有効な名前が必要です。無効な Cookie はサイレントに破棄される場合があります。
パラメータ:
name: クッキーの名前
値: クッキーの値
maxAge int: Cookie の生存時間、単位は秒です。
パス: Cookie が配置されているディレクトリ
ドメイン文字列: ドメイン名
セキュア: https 経由でのみアクセスできるかどうか
httpOnly bool: 他の人が js を通じて独自の Cookie を取得できるようにするかどうか
デモンストレーションの例:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func TestHandler(c *gin.Context) {
// 获取客户端是否携带cookie
if cookie, err := c.Cookie("username"); err != nil {
fmt.Println("cookie", cookie)
fmt.Println("err", err)
cookie = "lucas"
// 给客户端设置cookie
c.SetCookie("username", cookie, 60*60, "/", "localhost", false, true)
fmt.Printf("cookie的值为:%v\n", cookie)
c.String(200, "测试cookie")
}
}
func main() {
// 1.创建路由
// 默认使用了2个中间件Logger(), Recovery()
engine := gin.Default()
engine.GET("/cookie", TestHandler)
engine.Run(":8888")
}
cookie
err http: named cookie not present
cookie的值为:lucas
[GIN] 2023/09/12 - 18:29:13 | 200 | 924.4µs | ::1 | GET "/cookie"
クッキーを表示する