go語言web開發框架_Iris框架講解(六):Session的使用和控制
在實際的專案開發中,我們會經常有業務場景使用到Session功能。在iris框架中,也為我們提供了方便使用,功能齊全的Session模組。Session模組的原始碼目錄為kataras/iris/sessions包。
Session與Cookie的區別
在學習web開發過程中,我們總會和session和cookie打交道。本節課我們學習sesion相關的知識,因此有必要先通過講解對比一下session和cookie的區別:
-
首先是兩者的相同點。session和cookie兩者都是用來儲存客戶的狀態資訊的手段。在登入、註冊等動作後,可以儲存相關賬戶的狀態資訊,方便程式後續跟蹤及使用。
-
其次是不同點,討論兩者的不同點我們從幾個角度來總結。首先是兩者的儲存位置。Cookie是儲存在客戶端瀏覽器上,方便客戶端請求時使用;Session儲存的相關資訊儲存在伺服器端,用於儲存客戶端連線的狀態資訊。
-
其次,從可以儲存的資料型別來看。Cookie僅僅支援儲存字串string一種資料型別,Session支援int、string、bool等多種資料型別,Session支援的資料型別更全更多。
Session物件建立
在實際的程式開發中,iris框架中可以非常方便的建立一個新的session物件。如下所示,即是session的建立:
... sessionID := "mySession" //session的建立 sess := sessions.New(sessions.Config{ Cookie: sessionID, })複製程式碼
支援的資料型別
在上文中,我們說過session支援的資料型別要比cookie多,我們來看一下iris框架中的session所支援儲存的資料型別:
//String:字串型別 session.GetString() //Int:無符號整形 及系列相關單位的同類型 session.GetInt() //Boolean:布林值型別 session.GetBoolean() //Float:單精度數值型別 及系列相關單位的同類型 session.GetFloat() //interface{}:介面 即任意資料結構型別 session.GetFlash()複製程式碼
上述程式碼塊,即列出了iris框架中所支援儲存的資料型別。我們在接下來的本節課程內容中,將會演示如何進行具體使用。
Session的儲存和使用
在實際的專案開發中,Session的用法非常普遍。在本節課堂中,我們通過一個模擬使用者登入、登出、查詢的案例來模擬Session的儲存、使用、刪除等操作。
具體案例如下:
app.Post("/login", func(context context.Context) { path := context.Path() app.Logger().Info(" 請求Path:", path) userName := context.PostValue("name") passwd := context.PostValue("pwd") if userName == "davie" && passwd == "pwd123" { session := sess.Start(context) //使用者名稱 session.Set(USERNAME, userName) //登入狀態 session.Set(ISLOGIN, true) context.WriteString("賬戶登入成功 ") } else { session := sess.Start(context) session.Set(ISLOGIN, false) context.WriteString("賬戶登入失敗,請重新嘗試") } }) ... app.Get("/logout", func(context context.Context) { path := context.Path() app.Logger().Info(" 退出登入 Path :", path) session := sess.Start(context) //刪除session session.Delete(ISLOGIN) session.Delete(USERNAME) context.WriteString("退出登入成功") }) ... app.Get("/query", func(context context.Context) { path := context.Path() app.Logger().Info(" 查詢資訊 path :", path) session := sess.Start(context) isLogin, err := session.GetBoolean(ISLOGIN) if err != nil { context.WriteString("賬戶未登入,請先登入 ") return } if isLogin { app.Logger().Info(" 賬戶已登入 ") context.WriteString("賬戶已登入") } else { app.Logger().Info(" 賬戶未登入 ") context.WriteString("賬戶未登入") } }) ...複製程式碼
上述的程式碼中展示了session的使用方法,更多全部的案例程式碼資料在配套的課程資料中可以檢視。
Session與資料庫結合使用
除了Session在程式中的使用,Session還可以與資料庫繫結使用,用以在停止服務時將使用者狀態session同步於資料庫中,並進行恢復。
db, err := boltdb.New("sessions.db", 0600) if err != nil { panic(err.Error()) } //程式中斷時,將資料庫關閉 iris.RegisterOnInterrupt(func() { defer db.Close() }) //session和db繫結 sess.UseDatabase(db)複製程式碼
本節課中,我們學習了Session的操作和使用相關的內容。在後面的實際專案開發中,我們本節課學習的內容將會得到應用實踐的機會。