<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【GoCN酷Go推薦】會話控制利器 gorilla/sessions

          共 3477字,需瀏覽 7分鐘

           ·

          2021-07-13 21:42

          推薦 gorilla/sessions 的背景

          在日常 Web 應用開發(fā)過程中,需要對用戶登錄狀態(tài)進行判斷,而 HTTP 是無狀態(tài)的,即不記錄用戶登錄狀態(tài),想要得到用戶登錄狀態(tài)得把登錄狀態(tài)保存下來,通常用戶狀態(tài)數(shù)據(jù)加密后用數(shù)據(jù)庫或者緩存等手段把存儲;原生的會話數(shù)據(jù)存儲的 HTTP cookie 對數(shù)據(jù)大小有限制,不能寫入太多太大的數(shù)據(jù),又不能對存儲的數(shù)據(jù)進行有效管理,而 gorilla/sessions 恰恰補充了原生回話控制的不足。

          gorilla/sessions 簡介

          gorilla/sessions 支持原生的 HTTP cookie 會話數(shù)據(jù)存儲和存儲介質(zhì)系統(tǒng)會話以及自定義會話等基礎設施(Memcache/Redis/SQLite/MySQL )的支持應有盡有。

          gorilla/sessions 提供了會話數(shù)據(jù)的加密解密,以及底層的 cookie 管理,提供的接口比較簡單易用,gorilla/sessions 主要特點如下:

          • 簡單的API:使用它作為設置簽名(和可選的加密)cookie的簡單方法。
          • 內(nèi)置的后端可以在 cookie 或文件系統(tǒng)中存儲會話。
          • Flash 信息:會話值持續(xù)到讀取為止。
          • 切換會話持久性(又稱 "記住我")和設置其他屬性的方便方法。
          • 輪換認證和加密密鑰的機制。
          • 每個請求有多個會話,甚至使用不同的后端。
          • 自定義會話后端的接口和基礎設施:來自不同端的會話可以使用一個共同的API進行檢索和批量保存。

          gorilla/sessions 應用

          下面是集成 gorilla/sessions 的簡單會話控制業(yè)務代碼段,如下:

          import (
           "github.com/gorilla/sessions"
           "net/http"
           "os"
          )

          // Store gorilla sessions 的存儲庫
          var Store = sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY")))

          // Session 當前會話
          var Session *sessions.Session

          // Request 用以獲取會話
          var Request *http.Request

          // Response 用以寫入會話
          var Response http.ResponseWriter

          // StartSession 初始化會話
          func StartSession(w http.ResponseWriter, r *http.Request) {
           Store, _ := Store.Get(r, "session-name")
           // Set some session values.
           session.Values["foo"] = "bar"
           session.Values[42] = 43
           //外部可以這么設置
           //Set("foo","bar")
           //Set("age", 22)
           // Save it before we write to the response/return from the handler.
           session.Save(r, w)
           
           Request = r
           Response = w
           //Save(Request, Response)
          }

          // Set 寫入鍵值對應的會話數(shù)據(jù)
          func Set(key interface{}, value interface{}) {
           Session.Values[key] = value
           Save()
          }

          // Get 獲取會話數(shù)據(jù),獲取數(shù)據(jù)時請做類型檢測
          func Get(key string) interface{} {
           return Session.Values[key]
          }

          // Destroy 刪除某個會話項
          func Destroy(key string) {
           delete(Session.Values, key)
           Save()
          }

          // Save 保持會話
          func Save() {
           Session.Save(Request, Response)
          }

          注意:非 HTTPS 的鏈接無法使用 Secure 和 HttpOnly,瀏覽器會報錯,因此非 HTTPS 要設置

          Session.Options.Secure = true
          Session.Options.HttpOnly = true

          首先,初始化一個會話存儲,調(diào)用 NewCookieStore() 并傳遞一個用于驗證會話的秘密密鑰。其次,在處理器中調(diào)用store.Get() 來檢索一個現(xiàn)有的會話或創(chuàng)建一個新的會話,在 session.Values 中設置一些會話值,它是一個 map[interface{}]interface{} 。最后,我們調(diào)用session.Save()來保存響應中的會話。

          值得注意的是,

          • 在生產(chǎn)代碼中,應該在調(diào)用 session.Save(r, w) 時檢查是否有錯誤,并顯示錯誤信息或以其他方式處理。
          • 會話數(shù)據(jù)被存儲在map[string]interface{}中,所以在檢索數(shù)據(jù)時需要對其進行類型驗證。
          • Save 必須在寫入響應之前調(diào)用,否則會話 cookie 將不會被發(fā)送到客戶端。

          默認情況下,會話 cookies 持續(xù)一個月。這可能對有些情況來說可能太長了,但在運行時很容易改變cookies 持續(xù)時間和其他相關屬性。會話可以被單獨配置,也可以服務提供者哪里配置,然后所有使用它保存的會話都將使用該配置。具體地調(diào)用 session.Options 或 store.Options 來設置一個新的配置。

          總結

          gorilla/sessions 支持原生的 cookie 會話數(shù)據(jù)存儲和文件系統(tǒng)會話以及自定義會話功能,可以在主流的 Go Web 框架或者自創(chuàng)的框架及應用上可以直接拿來就可以使用。

          參考資料

          • https://github.com/gorilla/sessions
          • https://pkg.go.dev/github.com/gorilla/sessions#section-readme


          還想了解更多嗎?

          更多請查看:https://github.com/gorilla/sessions

          歡迎加入我們GOLANG中國社區(qū):https://gocn.vip/


          《酷Go推薦》招募:


          各位Gopher同學,最近我們社區(qū)打算推出一個類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個庫或者好的項目,然后寫一點這個庫使用方法或者優(yōu)點之類的,這樣可以真正的幫助到大家能夠?qū)W習到

          新的庫,并且知道怎么用。


          大概規(guī)則和每日新聞類似,如果報名人多的話每個人一個月輪到一次,歡迎大家報名!(報名地址:https://wj.qq.com/s2/7734329/3f51)


          掃碼也可以加入 GoCN 的大家族喲~






          瀏覽 25
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩精品毛片 | 九色蝌蚪9l视频蝌蚪9l视频 | 色吊丝永久性观看网站在线观看 | 99乱伦| 亚州欧美 |