GoFrame Session-基本介紹

2022-04-14 10:20 更新

?GoFrame?框架提供了完善的?Session?管理能力,由?gsession?組件實(shí)現(xiàn)。由于?Session?機(jī)制在?HTTP?服務(wù)中最常用,因此后續(xù)章節(jié)中將著重以?HTTP?服務(wù)為示例介紹?Session?的使用。

基本介紹

接口文檔:https://pkg.go.dev/github.com/gogf/gf/v2/os/gsession

任何時候都可以通過?ghttp.Request?獲取?Session?對象,因?yàn)?Cookie?和?Session?都是和請求會話相關(guān),因此都屬于?Request?的成員對象,并對外公開。?GoFrame?框架的?Session?默認(rèn)過期時間是24小時。

?SessionId?默認(rèn)通過?Cookie?來傳遞,并且也支持客戶端通過?Header?傳遞?SessionId?,?SessionId?的識別名稱可以通過?ghttp.Server?的?SetSessionIdName?進(jìn)行修改。?Session?的操作是支持并發(fā)安全的,這也是框架在對?Session?的設(shè)計上不采用直接以?map?的形式操作數(shù)據(jù)的原因。在?HTTP?請求流程中,我們可以通過?ghttp.Request?對象來獲取?Session?對象,并執(zhí)行相應(yīng)的數(shù)據(jù)操作。

此外,?ghttp.Server?中的?SessionId?使用的是客戶端的 ?RemoteAddr + Header? 請求信息通過?guid?模塊來生成的,保證隨機(jī)及唯一性:https://github.com/gogf/gf/v2/blob/master/net/ghttp/ghttp_request.go

需要注意的是,?ghttp.Request?中的?Session?對象采用了"懶初始化(?LazyInitialization?)"設(shè)計方式,默認(rèn)在?Request?中有一個?Session?屬性對象,但是并未初始化(一個空對象),只有在使用?Session?屬性對象的方法時才會真正執(zhí)行初始化。這樣的設(shè)計既保障了未使用?Session?特性的請求執(zhí)行性能,也保證了組件使用的易用性。

gsession模塊

?Session?的管理功能由獨(dú)立的?gsession?模塊實(shí)現(xiàn),并已完美整合到了?ghttp.Server?中。由于該模塊是解耦獨(dú)立的,因此可以應(yīng)用到更多不同的場景中,例如:?TCP?通信、?gRPC?接口服務(wù)等等。在?gsession?模塊中有比較重要的三個對象/接口:

  1. ?gsession.Manager?:管理?Session?對象、?Storage?持久化存儲對象、以及過期時間控制。
  2. ?gsession.Session?:單個?Session?會話管理對象,用于?Session?參數(shù)的增刪查改等數(shù)據(jù)管理操作。
  3. ?gsession.Storage?:這是一個接口定義,用于?Session?對象的持久化存儲、數(shù)據(jù)寫入/讀取、存活更新等操作,開發(fā)者可基于該接口實(shí)現(xiàn)自定義的持久化存儲特性。 該接口定義詳見:https://github.com/gogf/gf/v2/blob/master/os/gsession/gsession_storage.go

存儲實(shí)現(xiàn)方式

?gsession?實(shí)現(xiàn)并為開發(fā)者提供了常見的四種?Session?存儲實(shí)現(xiàn)方式:

  • 基于文件存儲(默認(rèn))。單節(jié)點(diǎn)部署方式下比較高效的持久化存儲方式:?Session-File ?
  • 基于純內(nèi)存存儲。單節(jié)點(diǎn)部署,性能最高效,但是無法持久化保存,重啟即丟失:?Session-Memory ?
  • 基于?Redis?存儲(?Key-Value?)。遠(yuǎn)程?Redis?節(jié)點(diǎn)存儲?Session?數(shù)據(jù),支持應(yīng)用多節(jié)點(diǎn)部署:?Session-Redis-KeyValue ?
  • 基于?Redis?存儲(?HashTable?)。遠(yuǎn)程?Redis?節(jié)點(diǎn)存儲?Session?數(shù)據(jù),支持應(yīng)用多節(jié)點(diǎn)部署:?Session-Redis-HashTable ?

四種方式各有優(yōu)劣,詳細(xì)介紹請查看對應(yīng)章節(jié)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號