新聞中心
?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í)候都可以通過(guò)?ghttp.Request?獲取?Session?對(duì)象,因?yàn)?Cookie?和?Session?都是和請(qǐng)求會(huì)話(huà)相關(guān),因此都屬于?Request?的成員對(duì)象,并對(duì)外公開(kāi)。?GoFrame?框架的?Session?默認(rèn)過(guò)期時(shí)間是24小時(shí)。
?SessionId?默認(rèn)通過(guò)?Cookie?來(lái)傳遞,并且也支持客戶(hù)端通過(guò)?Header?傳遞?SessionId?,?SessionId?的識(shí)別名稱(chēng)可以通過(guò)?ghttp.Server?的?SetSessionIdName?進(jìn)行修改。?Session?的操作是支持并發(fā)安全的,這也是框架在對(duì)?Session?的設(shè)計(jì)上不采用直接以?map?的形式操作數(shù)據(jù)的原因。在?HTTP?請(qǐng)求流程中,我們可以通過(guò)?ghttp.Request?對(duì)象來(lái)獲取?Session?對(duì)象,并執(zhí)行相應(yīng)的數(shù)據(jù)操作。
此外,?ghttp.Server?中的?SessionId?使用的是客戶(hù)端的 ?RemoteAddr + Header? 請(qǐng)求信息通過(guò)?guid?模塊來(lái)生成的,保證隨機(jī)及唯一性:https://github.com/gogf/gf/v2/blob/master/net/ghttp/ghttp_request.go
需要注意的是,?ghttp.Request?中的?Session?對(duì)象采用了"懶初始化(?LazyInitialization?)"設(shè)計(jì)方式,默認(rèn)在?Request?中有一個(gè)?Session?屬性對(duì)象,但是并未初始化(一個(gè)空對(duì)象),只有在使用?Session?屬性對(duì)象的方法時(shí)才會(huì)真正執(zhí)行初始化。這樣的設(shè)計(jì)既保障了未使用?Session?特性的請(qǐng)求執(zhí)行性能,也保證了組件使用的易用性。
gsession模塊
?Session?的管理功能由獨(dú)立的?gsession?模塊實(shí)現(xiàn),并已完美整合到了?ghttp.Server?中。由于該模塊是解耦獨(dú)立的,因此可以應(yīng)用到更多不同的場(chǎng)景中,例如:?TCP?通信、?gRPC?接口服務(wù)等等。在?gsession?模塊中有比較重要的三個(gè)對(duì)象/接口:
- ?
gsession.Manager?:管理?Session?對(duì)象、?Storage?持久化存儲(chǔ)對(duì)象、以及過(guò)期時(shí)間控制。 - ?
gsession.Session?:?jiǎn)蝹€(gè)?Session?會(huì)話(huà)管理對(duì)象,用于?Session?參數(shù)的增刪查改等數(shù)據(jù)管理操作。 - ?
gsession.Storage?:這是一個(gè)接口定義,用于?Session?對(duì)象的持久化存儲(chǔ)、數(shù)據(jù)寫(xiě)入/讀取、存活更新等操作,開(kāi)發(fā)者可基于該接口實(shí)現(xiàn)自定義的持久化存儲(chǔ)特性。 該接口定義詳見(jiàn):https://github.com/gogf/gf/v2/blob/master/os/gsession/gsession_storage.go
存儲(chǔ)實(shí)現(xiàn)方式
?gsession?實(shí)現(xiàn)并為開(kāi)發(fā)者提供了常見(jiàn)的四種?Session?存儲(chǔ)實(shí)現(xiàn)方式:
- 基于文件存儲(chǔ)(默認(rèn))。單節(jié)點(diǎn)部署方式下比較高效的持久化存儲(chǔ)方式:?
Session-File? - 基于純內(nèi)存存儲(chǔ)。單節(jié)點(diǎn)部署,性能最高效,但是無(wú)法持久化保存,重啟即丟失:?
Session-Memory? - 基于?
Redis?存儲(chǔ)(?Key-Value?)。遠(yuǎn)程?Redis?節(jié)點(diǎn)存儲(chǔ)?Session?數(shù)據(jù),支持應(yīng)用多節(jié)點(diǎn)部署:?Session-Redis-KeyValue? - 基于?
Redis?存儲(chǔ)(?HashTable?)。遠(yuǎn)程?Redis?節(jié)點(diǎn)存儲(chǔ)?Session?數(shù)據(jù),支持應(yīng)用多節(jié)點(diǎn)部署:?Session-Redis-HashTable?
四種方式各有優(yōu)劣,詳細(xì)介紹請(qǐng)查看對(duì)應(yīng)章節(jié)。
網(wǎng)頁(yè)題目:創(chuàng)新互聯(lián)GoFrame教程:GoFrameSession-基本介紹
本文來(lái)源:http://m.fisionsoft.com.cn/article/cdpcdos.html


咨詢(xún)
建站咨詢(xún)
