# 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>)
