Go言語でCookieを操作する方法とサンプル例を初心者向けに解説
生徒
「先生、Go言語でWebアプリを作るときに、ユーザーの情報をブラウザに保存したいんですがどうすればいいですか?」
先生
「その場合はCookieを使うと便利です。Cookieはブラウザに小さな情報を保存する仕組みです。」
生徒
「具体的にはどのように設定したり読み込んだりするんですか?」
先生
「それでは、基本的な使い方とサンプルコードを見ていきましょう!」
1. Cookieとは?
Cookieは、Webブラウザに保存される小さな情報のことです。例えばログイン状態の保持やユーザー設定の保存に使われます。サーバーから送られた情報をブラウザが記憶し、次回のアクセス時に同じ情報を送信します。
2. Go言語でCookieを設定する方法
Go言語では、http.SetCookie関数を使ってCookieを設定します。Cookieはhttp.Cookie構造体で作成し、レスポンスに追加します。
cookie := &http.Cookie{
Name: "username",
Value: "gopher",
Path: "/",
MaxAge: 3600, // 1時間で有効期限切れ
}
http.SetCookie(w, cookie)
この例では、「username」という名前のCookieを作成し、値を「gopher」に設定しています。MaxAgeはCookieの有効期限を秒単位で指定しています。
3. Cookieを読み取る方法
Cookieはr.Cookie("名前")で取得できます。取得できない場合はエラーが返るので注意が必要です。
cookie, err := r.Cookie("username")
if err != nil {
fmt.Fprintln(w, "Cookieが見つかりません")
return
}
fmt.Fprintf(w, "Cookieの値は: %s", cookie.Value)
このコードでは、「username」という名前のCookieを読み込み、値を表示しています。もしCookieが存在しなければ「Cookieが見つかりません」と表示されます。
4. Cookieを削除する方法
Cookieを削除するには、同じ名前でMaxAgeを負の値にして再設定します。これによりブラウザはCookieを破棄します。
cookie := &http.Cookie{
Name: "username",
Value: "",
Path: "/",
MaxAge: -1,
}
http.SetCookie(w, cookie)
削除したいCookieの名前を指定し、値は空、MaxAgeを-1にすることでブラウザから消去されます。
5. 実際にCookieを操作するサンプルWebアプリ
package main
import (
"fmt"
"net/http"
)
func setCookieHandler(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "username",
Value: "gopher",
Path: "/",
MaxAge: 3600,
}
http.SetCookie(w, cookie)
fmt.Fprintln(w, "Cookieを設定しました!")
}
func readCookieHandler(w http.ResponseWriter, r *http.Request) {
cookie, err := r.Cookie("username")
if err != nil {
fmt.Fprintln(w, "Cookieが見つかりません")
return
}
fmt.Fprintf(w, "Cookieの値は: %s", cookie.Value)
}
func deleteCookieHandler(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "username",
Value: "",
Path: "/",
MaxAge: -1,
}
http.SetCookie(w, cookie)
fmt.Fprintln(w, "Cookieを削除しました")
}
func main() {
http.HandleFunc("/set", setCookieHandler)
http.HandleFunc("/read", readCookieHandler)
http.HandleFunc("/delete", deleteCookieHandler)
http.ListenAndServe(":8080", nil)
}
このアプリでは、/setでCookieを設定し、/readで読み込み、/deleteで削除できます。ブラウザでアクセスして動作を確認することが可能です。
6. Cookieを使う際の注意点
- Cookieにはサイズ制限があるため大量データの保存には向かない
- セキュリティ上、パスワードなど機密情報はCookieに直接保存しない
- 必ず
Pathや有効期限を適切に設定する - ユーザーのブラウザがCookieを無効にしている場合は使えないことがある
これらを理解して安全にCookieを使うことで、ユーザー体験を向上させることができます。