在實際的項目開發中,咱們會常常有業務場景使用到Session功能。在iris框架中,也爲咱們提供了方便使用,功能齊全的Session模塊。Session模塊的源碼目錄爲kataras/iris/sessions包。web
在學習web開發過程當中,咱們總會和session和cookie打交道。本節課咱們學習sesion相關的知識,所以有必要先經過講解對比一下session和cookie的區別:數據庫
首先是二者的相同點。session和cookie二者都是用來存儲客戶的狀態信息的手段。在登陸、註冊等動做後,能夠存儲相關帳戶的狀態信息,方便程序後續跟蹤及使用。瀏覽器
其次是不一樣點,討論二者的不一樣點咱們從幾個角度來總結。首先是二者的存儲位置。Cookie是存儲在客戶端瀏覽器上,方便客戶端請求時使用;Session存儲的相關信息存儲在服務器端,用於存儲客戶端鏈接的狀態信息。bash
其次,從能夠存儲的數據類型來看。Cookie僅僅支持存儲字符串string一種數據類型,Session支持int、string、bool等多種數據類型,Session支持的數據類型更全更多。服務器
在實際的程序開發中,iris框架中能夠很是方便的建立一個新的session對象。以下所示,便是session的建立:cookie
...
sessionID := "mySession"
//session的建立
sess := sessions.New(sessions.Config{
Cookie: sessionID,
})複製代碼
在上文中,咱們說過session支持的數據類型要比cookie多,咱們來看一下iris框架中的session所支持存儲的數據類型:session
//String:字符串類型
session.GetString()
//Int:無符號整形 及系列相關單位的同類型
session.GetInt()
//Boolean:布爾值類型
session.GetBoolean()
//Float:單精度數值類型 及系列相關單位的同類型
session.GetFloat()
//interface{}:接口 即任意數據結構類型
session.GetFlash()複製代碼
上述代碼塊,即列出了iris框架中所支持存儲的數據類型。咱們在接下來的本節課程內容中,將會演示如何進行具體使用。數據結構
在實際的項目開發中,Session的用法很是廣泛。在本節課堂中,咱們經過一個模擬用戶登陸、登出、查詢的案例來模擬Session的存儲、使用、刪除等操做。app
具體案例以下:框架
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同步於數據庫中,並進行恢復。
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的操做和使用相關的內容。在後面的實際項目開發中,咱們本節課學習的內容將會獲得應用實踐的機會。