はじめに
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
}