Files
build-web-application-with-…/ja/14.2.md
2014-12-14 23:27:42 +08:00

104 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 14.2 Sessionのサポート
第6章ではGo言語においてどのようにsessionを使用するのかご紹介しました。また、sessionMangerを実装しました。beegoフレームワークはsessionManagerに基づいて便利な処理機能を実装します。
## sessionの実装
beegoでは主に以下のグローバル変数でsession処理をコントロールします
//related to session
SessionOn bool // sessionモジュールが起動されているか。デフォルトでは起動しません。
SessionProvider string // sessionバックエンドでは処理モジュールを提供します。デフォルトはsessionManagerがサポートするmemoryです。
SessionName string // クライアントで保存されるcookiesの名前
SessionGCMaxLifetime int64 // cookiesの有効期限
GlobalSessions *session.Manager //グローバルなsessionコントローラ
当然上のいくつかの変数は値を初期化する必要があり、以下のコードによって設定ファイルとともにこれらの値を設定することができます。
if ar, err := AppConfig.Bool("sessionon"); err != nil {
SessionOn = false
} else {
SessionOn = ar
}
if ar := AppConfig.String("sessionprovider"); ar == "" {
SessionProvider = "memory"
} else {
SessionProvider = ar
}
if ar := AppConfig.String("sessionname"); ar == "" {
SessionName = "beegosessionID"
} else {
SessionName = ar
}
if ar, err := AppConfig.Int("sessiongcmaxlifetime"); err != nil && ar != 0 {
int64val, _ := strconv.ParseInt(strconv.Itoa(ar), 10, 64)
SessionGCMaxLifetime = int64val
} else {
SessionGCMaxLifetime = 3600
}
beego.Run関数では以下のようなコードが追加されています
if SessionOn {
GlobalSessions, _ = session.NewManager(SessionProvider, SessionName, SessionGCMaxLifetime)
go GlobalSessions.GC()
}
SessionOn設定をtrueにするだけで、デフォルトでsession機能が起動します。独立してgoroutineを起動することでsessionを処理します。
カスタム設定のControllerにおいて素早くsessionを使用するため、作者は`beego.Controller`で以下のような方法を提供しています:
func (c *Controller) StartSession() (sess session.Session) {
sess = GlobalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
return
}
## sessionの使用
上のコードによって、beegoフレームワークは簡単にsession機能を継承することができるとわかります。ではプロジェクトにおいてどのように使用するのでしょうか
まずアプリケーションのmainでsessionを起動します
beego.SessionOn = true
その次にコントローラの対応するメソッドで以下に示すようにsessionを使用します
func (this *MainController) Get() {
var intcount int
sess := this.StartSession()
count := sess.Get("count")
if count == nil {
intcount = 0
} else {
intcount = count.(int)
}
intcount = intcount + 1
sess.Set("count", intcount)
this.Data["Username"] = "astaxie"
this.Data["Email"] = "astaxie@gmail.com"
this.Data["Count"] = intcount
this.TplNames = "index.tpl"
}
上のコードはどのようにしてコントロールロジックにおいてsessionを使用するか示しています。主にステップに分けられます
1. sessionオブジェクトを取得する
//オブジェクトを取得、PHPのsession_start()に似ています。
sess := this.StartSession()
2. sessionを使用して一般的なsession値を操作します
//session値を取得します。PHPの$_SESSION["count"}に似ています。
sess.Get("count")
//session値を設定します
sess.Set("count", intcount)
上のコードからbeegoフレームワークの開発するアプリケーションにおいて使用するsessionはなかなか便利だとわかります。基本的にPHPでコールする`session_start()`とよく似ています。
## links
* [目次](<preface.md>)
* 前へ: [静的なファイルのサポート](<14.1.md>)
* 次へ: [フォームおよび検証のサポート](<14.3.md>)