go語言web開發框架_Iris框架講解(六):Session的使用和控制

在實際的項目開發中,咱們會常常有業務場景使用到Session功能。在iris框架中,也爲咱們提供了方便使用,功能齊全的Session模塊。Session模塊的源碼目錄爲kataras/iris/sessions包。web

Session與Cookie的區別

在學習web開發過程當中,咱們總會和session和cookie打交道。本節課咱們學習sesion相關的知識,所以有必要先經過講解對比一下session和cookie的區別:數據庫

  • 首先是二者的相同點。session和cookie二者都是用來存儲客戶的狀態信息的手段。在登陸、註冊等動做後,能夠存儲相關帳戶的狀態信息,方便程序後續跟蹤及使用。瀏覽器

  • 其次是不一樣點,討論二者的不一樣點咱們從幾個角度來總結。首先是二者的存儲位置。Cookie是存儲在客戶端瀏覽器上,方便客戶端請求時使用;Session存儲的相關信息存儲在服務器端,用於存儲客戶端鏈接的狀態信息。bash

  • 其次,從能夠存儲的數據類型來看。Cookie僅僅支持存儲字符串string一種數據類型,Session支持int、string、bool等多種數據類型,Session支持的數據類型更全更多。服務器

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的用法很是廣泛。在本節課堂中,咱們經過一個模擬用戶登陸、登出、查詢的案例來模擬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還能夠與數據庫綁定使用,用以在中止服務時將用戶狀態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的操做和使用相關的內容。在後面的實際項目開發中,咱們本節課學習的內容將會獲得應用實踐的機會。

相關文章
相關標籤/搜索