コンテンツにスキップ

Cookie

Ginはレスポンスとリクエストに対してHTTP Cookieを設定および読み取るためのヘルパーを提供しています。

SetCookieのパラメータ

c.SetCookie()のメソッドシグネチャは以下の通りです:

c.SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
パラメータ説明
nameCookie名(キー)。
valueCookieの値。
maxAge有効期間()。Cookieを削除するには-1、ブラウザを閉じたときに削除するセッションCookieには0を設定します。
pathCookieが有効なURLパス。サイト全体で利用可能にするには"/"を使用します。
domainCookieがスコープされるドメイン(例:"example.com")。開発中は"localhost"を使用します。
securetrueの場合、CookieはHTTPS接続経由でのみ送信されます。本番環境ではtrueに設定してください。
httpOnlytrueの場合、クライアントサイドのJavaScript(document.cookie)からCookieにアクセスできなくなり、XSS攻撃の防止に役立ちます。本番環境ではtrueに設定してください。

Cookieの設定と取得

import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/cookie", func(c *gin.Context) {
cookie, err := c.Cookie("gin_cookie")
if err != nil {
cookie = "NotSet"
c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false, true)
}
fmt.Printf("Cookie value: %s \n", cookie)
})
router.Run()
}

テスト

Terminal window
# 最初のリクエスト -- Cookieなし、サーバーが設定
curl -v http://localhost:8080/cookie
# レスポンスヘッダーの "Set-Cookie: gin_cookie=test" を確認
# 2回目のリクエスト -- Cookieを返送
curl -v --cookie "gin_cookie=test" http://localhost:8080/cookie
# サーバーログ: Cookie value: test

Cookieの削除

max ageを-1に設定してCookieを削除します。

c.SetCookie("gin_cookie", "test", -1, "/", "localhost", false, true)

http.CookieによるCookie設定(v1.11以降)

Ginは*http.Cookieを使用したCookie設定もサポートしており、ExpiresMaxAgeSameSitePartitionedなどのフィールドにアクセスできます。

import (
"net/http"
"time"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/set-cookie", func(c *gin.Context) {
c.SetCookieData(&http.Cookie{
Name: "session_id",
Value: "abc123",
Path: "/",
Domain: "localhost",
Expires: time.Now().Add(24 * time.Hour),
MaxAge: 86400,
Secure: true,
HttpOnly: true,
SameSite: http.SameSiteLaxMode,
// Partitioned: true, // Go 1.22+
})
c.String(http.StatusOK, "ok")
})
r.Run(":8080")
}

関連項目