新聞中心
?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
任何時(shí)候都可以通過?ghttp.Request?獲取?Session?對象,因?yàn)?Cookie?和?Session?都是和請求會話相關(guān),因此都屬于?Request?的成員對象,并對外公開。?GoFrame?框架的?Session?默認(rèn)過期時(shí)間是24小時(shí)。
?SessionId?默認(rèn)通過?Cookie?來傳遞,并且也支持客戶端通過?Header?傳遞?SessionId?,?SessionId?的識別名稱可以通過?ghttp.Server?的?SetSessionIdName?進(jìn)行修改。?Session?的操作是支持并發(fā)安全的,這也是框架在對?Session?的設(shè)計(jì)上不采用直接以?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è)計(jì)方式,默認(rèn)在?Request?中有一個(gè)?Session?屬性對象,但是并未初始化(一個(gè)空對象),只有在使用?Session?屬性對象的方法時(shí)才會真正執(zhí)行初始化。這樣的設(shè)計(jì)既保障了未使用?Session?特性的請求執(zhí)行性能,也保證了組件使用的易用性。
gsession模塊
?Session?的管理功能由獨(dú)立的?gsession?模塊實(shí)現(xiàn),并已完美整合到了?ghttp.Server?中。由于該模塊是解耦獨(dú)立的,因此可以應(yīng)用到更多不同的場景中,例如:?TCP?通信、?gRPC?接口服務(wù)等等。在?gsession?模塊中有比較重要的三個(gè)對象/接口:
- ?
gsession.Manager?:管理?Session?對象、?Storage?持久化存儲對象、以及過期時(shí)間控制。 - ?
gsession.Session?:單個(gè)?Session?會話管理對象,用于?Session?參數(shù)的增刪查改等數(shù)據(jù)管理操作。 - ?
gsession.Storage?:這是一個(gè)接口定義,用于?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é)。
新聞名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrameSession-基本介紹
分享網(wǎng)址:http://m.5511xx.com/article/cdpcdos.html


咨詢
建站咨詢
