0
0

Go によるsessionの処理

Last updated at Posted at 2024-01-03

はじめに

Goでのsessionの扱いについてわかりやすく説明することを目標に記事を書きました。

そもそもsessionとは?

・DBではなくサーバーに保存される情報で、容量はサーバーの容量に依存する。
・key,valueを設定して好きな値を保存できる。
・sessionに保存されるid でクライアントのcookieと結びつく。
・ログイン後はログアウトするまで基本的に消さないデータ。有効期限を設定しているなら、それを超えたら消える。

Goでのsessionの扱い

sessionを保存するのに便利なパッケージのgorilla sessionを使用してsessionの扱いを紹介します。
https://github.com/gorilla/sessions

まずsessionを保存するためのstoreを作成します。

var cs *sessions.CookieStore = sessions.NewCookieStore([]byte("secret-key-xxxxx”))

ここの引数の[]byte("secret-key-xxxxx”) は秘密鍵になります。

ses, _ := cs.Get(rq,”session_name”)

そして作成したsessionに値を詰めていきます。

ses.Values[“name”] = rq.PostFormValue(“name”)
ses.Values[“pass”] = rq.PostFormValue(“pass”)

注意しないといけないのは、ses.Valuesは空のインターフェースなので、型アサーションをして型を変換しなければならない点です。
詰め終わったらsessionを保存しておきましょう。saveしないとsessionの値は消えてしまいます。

ses.Save(request,writer)

こうして、sessionから値を取り出すことが可能となります。

ses[key] = value

ちなみにSession IDは元から構造体Sessionに用意されています。

type Session struct {
	// The ID of the session, generated by stores. It should not be used for
	// user data.
	ID string
	// Values contains the user-data for the session.
	Values  map[interface{}]interface{}
	Options *Options
	IsNew   bool
	// contains filtered or unexported fields
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0