カテゴリ: Go言語 更新日: 2025/11/17

Go言語でセッション管理を行う基本!サードパーティライブラリ活用例

Go言語でセッション管理を行う基本!サードパーティライブラリ活用例
Go言語でセッション管理を行う基本!サードパーティライブラリ活用例

先生と生徒の会話形式で理解しよう

生徒

「先生、Go言語でWebアプリを作るときに、ユーザーごとの情報を安全に管理したいんですが、どうすればいいですか?」

先生

「それならセッション管理を使うと便利です。セッションは、ユーザーごとの情報をサーバー側で一時的に保存する仕組みです。」

生徒

「Cookieとは違うんですか?」

先生

「Cookieはブラウザに保存されますが、セッションはサーバー側で管理されます。CookieはセッションIDだけを保持し、実際の情報はサーバーで管理されるのが一般的です。」

1. セッション管理とは?

1. セッション管理とは?
1. セッション管理とは?

セッション管理とは、ユーザーごとの一時的な情報をサーバーで保持する仕組みです。例えば、ログイン状態の保持やショッピングカートの中身管理に使われます。ユーザーがブラウザを閉じても、セッションIDを用いることで情報を安全に保持できます。

2. Go言語でのセッション管理の基本

2. Go言語でのセッション管理の基本
2. Go言語でのセッション管理の基本

Go言語では標準ライブラリだけで簡単なセッション管理も可能ですが、より便利に扱うためにサードパーティのライブラリを使うのが一般的です。特に人気なのがgorilla/sessionsです。

gorilla/sessionsは、Cookieやファイル、メモリにセッション情報を安全に保存できるライブラリです。

3. gorilla/sessionsの使い方

3. gorilla/sessionsの使い方
3. gorilla/sessionsの使い方

まず、ライブラリをインストールします。


go get github.com/gorilla/sessions

次に、セッションストアを作成します。ここではCookieストアを使用します。


import (
    "fmt"
    "net/http"
    "github.com/gorilla/sessions"
)

var store = sessions.NewCookieStore([]byte("secret-key"))

このsecret-keyは、セッションの暗号化に使われます。実際のアプリでは長くて複雑な文字列にすることが推奨されます。

4. セッションに値を保存する方法

4. セッションに値を保存する方法
4. セッションに値を保存する方法

セッションに値を保存するには、まずセッションを取得し、値をセットして保存します。


func setSessionHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    session.Values["username"] = "gopher"
    session.Save(r, w)
    fmt.Fprintln(w, "セッションに値を保存しました!")
}

この例では、「username」というキーに「gopher」を保存しています。

5. セッションから値を取得する方法

5. セッションから値を取得する方法
5. セッションから値を取得する方法

保存した値は、同じセッションを取得してキーを指定することで取り出せます。


func getSessionHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    username, ok := session.Values["username"].(string)
    if !ok {
        fmt.Fprintln(w, "セッションに値がありません")
        return
    }
    fmt.Fprintf(w, "セッションの値は: %s", username)
}

型アサーションを使って値を取り出すことで、正しく文字列として取得できます。

6. セッションを削除する方法

6. セッションを削除する方法
6. セッションを削除する方法

セッションの値を削除するには、session.Valuesからキーを削除して保存します。


func deleteSessionHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    delete(session.Values, "username")
    session.Save(r, w)
    fmt.Fprintln(w, "セッションの値を削除しました")
}

これにより指定した値だけを消すことができます。全ての値を削除したい場合はセッション全体を破棄することも可能です。

7. サンプルWebアプリ

7. サンプルWebアプリ
7. サンプルWebアプリ

package main

import (
    "fmt"
    "net/http"
    "github.com/gorilla/sessions"
)

var store = sessions.NewCookieStore([]byte("secret-key"))

func setSessionHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    session.Values["username"] = "gopher"
    session.Save(r, w)
    fmt.Fprintln(w, "セッションに値を保存しました!")
}

func getSessionHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    username, ok := session.Values["username"].(string)
    if !ok {
        fmt.Fprintln(w, "セッションに値がありません")
        return
    }
    fmt.Fprintf(w, "セッションの値は: %s", username)
}

func deleteSessionHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := store.Get(r, "session-name")
    delete(session.Values, "username")
    session.Save(r, w)
    fmt.Fprintln(w, "セッションの値を削除しました")
}

func main() {
    http.HandleFunc("/set", setSessionHandler)
    http.HandleFunc("/get", getSessionHandler)
    http.HandleFunc("/delete", deleteSessionHandler)
    http.ListenAndServe(":8080", nil)
}

このアプリでは、/setでセッションに値を保存し、/getで取得、/deleteで削除できます。ブラウザでアクセスしてセッションの動作を確認できます。

8. セッション管理の注意点

8. セッション管理の注意点
8. セッション管理の注意点
  • セッションIDは推測されにくい値にすること
  • 重要な情報は暗号化やサーバー側での安全な保存が必要
  • 有効期限を設定してセッションの無限保持を避ける
  • サードパーティライブラリを使うと、セッション管理が簡単で安全に行える
カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.3
Kotlin・Go・Swift記事の人気No3
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎