国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

可靈活擴展的自定義Session狀態(tài)存儲驅(qū)動

2019-11-17 01:32:24
字體:
供稿:網(wǎng)友

可靈活擴展的自定義session狀態(tài)存儲驅(qū)動

Session是互聯(lián)網(wǎng)應(yīng)用中非常重要的玩意兒,對于超過單臺部署的站點集群,都會存在會話共享的需求。在web.config中,微軟提供了sessionstate節(jié)點來定義不同的Session狀態(tài)存儲方式。本文就自定義模式下的Session狀態(tài)存儲驅(qū)動提供一些干貨。

首先,想要接管Session狀態(tài)存儲,需要了解一些基本的東西。

SessionIDManager

/// <summary>    /// 自定義SessionID管理器    /// </summary>    public class CustomSessionIDManager : SessionIDManager    {        /// <summary>        /// 創(chuàng)建SessionID        /// </summary>        /// <param name="context"></param>        /// <returns></returns>        public override string CreateSessionID(HttpContext context)        {            return string.Format("{0}.{1}",  SessionPRoviderConfigurationSectionHandler.SessionProviderSettings.SessionProfix, base.CreateSessionID(context));        }        /// <summary>        /// 驗證        /// </summary>        /// <param name="id"></param>        /// <returns></returns>        public override bool Validate(string id)        {            string prefix = string.Empty;            string realId = string.Empty;            if (string.IsNullOrEmpty(id) || id.Trim().Length == 0)            {                return false;            }            var parsedValues = id.Split('.');            if (parsedValues == null || parsedValues.Length != 2)            {                return false;            }            prefix = parsedValues[0];            realId = parsedValues[1];            return base.Validate(realId);        }    }

想要共享Session,肯定就會有SessionID的前綴需求,而SessionIDManager就提供了可自定義的虛方法,這邊以CustomSessionIDManager舉例。CreateSessionID方法提供了創(chuàng)建SessionID的實現(xiàn),重載該方法,用{0}.{1}的方式提供基于前綴的SessionID生成。而Validate是拆解帶前綴的SessionID來驗證真實的SessionID。

SessionStateStoreProviderBase

/// <summary>    /// 自定義Session狀態(tài)存儲驅(qū)動    /// </summary>    public sealed class CustomSessionStateStoreProvider : SessionStateStoreProviderBase    {        /// <summary>        /// 構(gòu)造函數(shù)        /// </summary>        public CustomSessionStateStoreProvider()        {            sessionStateStoreBehavior = SessionProviderBehaviorFactory.CreateSessionStateStoreBehaviorInstance();        }        /// <summary>        /// Session狀態(tài)存儲行為        /// </summary>        readonly ISessionStateStoreBehavior sessionStateStoreBehavior;        /// <summary>        /// 創(chuàng)建新的存儲數(shù)據(jù)        /// </summary>        /// <param name="context"></param>        /// <param name="timeout"></param>        /// <returns></returns>        public override SessionStateStoreData CreateNewStoreData(System.Web.HttpContext context, int timeout)        {            return new SessionStateStoreData(new SessionStateItemCollection(), SessionStateUtility.GetSessionStaticObjects(context), timeout);        }        /// <summary>        /// 創(chuàng)建未初始化的項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="timeout"></param>        public override void CreateUninitializedItem(System.Web.HttpContext context, string id, int timeout)        {            sessionStateStoreBehavior.CreateUninitializedItem(context, id, timeout);        }        /// <summary>        /// 獲取項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="locked"></param>        /// <param name="lockAge"></param>        /// <param name="lockId"></param>        /// <param name="actions"></param>        /// <returns></returns>        public override SessionStateStoreData GetItem(System.Web.HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions)        {            return sessionStateStoreBehavior.GetItem(false, context, id, out locked, out lockAge, out lockId, out actions);        }        /// <summary>        /// 獨占獲取項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="locked"></param>        /// <param name="lockAge"></param>        /// <param name="lockId"></param>        /// <param name="actions"></param>        /// <returns></returns>        public override SessionStateStoreData GetItemExclusive(System.Web.HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions)        {            return sessionStateStoreBehavior.GetItem(true, context, id, out locked, out lockAge, out lockId, out actions);        }        /// <summary>        /// 獨占釋放項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="lockId"></param>        public override void ReleaseItemExclusive(System.Web.HttpContext context, string id, object lockId)        {            sessionStateStoreBehavior.ReleaseItem(context, id, lockId);        }        /// <summary>        /// 移除項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="lockId"></param>        /// <param name="item"></param>        public override void RemoveItem(System.Web.HttpContext context, string id, object lockId, SessionStateStoreData item)        {            sessionStateStoreBehavior.RemoveItem(context, id, lockId);        }        /// <summary>        /// 重設(shè)項的超時時間        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        public override void ResetItemTimeout(System.Web.HttpContext context, string id)        {            sessionStateStoreBehavior.ResetItemTimeout(context, id);        }        /// <summary>        /// 獨占設(shè)置并釋放項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="item"></param>        /// <param name="lockId"></param>        /// <param name="newItem"></param>        public override void SetAndReleaseItemExclusive(System.Web.HttpContext context, string id, SessionStateStoreData item, object lockId, bool newItem)        {            sessionStateStoreBehavior.SetAndReleaseItem(context, id, item, lockId, newItem);        }        /// <summary>        /// 回收        /// </summary>        public override void Dispose() { }        /// <summary>        /// 結(jié)束請求        /// </summary>        /// <param name="context"></param>        public override void EndRequest(System.Web.HttpContext context) { }        /// <summary>        /// 初始化請求        /// </summary>        /// <param name="context"></param>        public override void InitializeRequest(System.Web.HttpContext context) { }        /// <summary>        /// 設(shè)置項過期回掉        /// </summary>        /// <param name="expireCallback"></param>        /// <returns></returns>        public override bool SetItemExpireCallback(SessionStateItemExpireCallback expireCallback) { return false; }    }

SessionStateStoreProviderBase是提供Session狀態(tài)存儲驅(qū)動的基類。從基類分析,想要靈活擴展,核心就是對Session存儲的那些方法實現(xiàn)進行抽象,讓驅(qū)動在執(zhí)行方法的時候不關(guān)心實現(xiàn)由誰來提供。因此,寫一個SessionStateStoreBehavior接口,在CustomSessionStateStoreProvider的構(gòu)造函數(shù)中,通過工廠在運行時得到實例。

SessionStateStoreBehavior

/// <summary>    /// Session狀態(tài)存儲行為接口    /// </summary>    public interface ISessionStateStoreBehavior    {        /// <summary>        /// 創(chuàng)建未初始化的項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="timeout"></param>        void CreateUninitializedItem(System.Web.HttpContext context, string id, int t
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 漳浦县| 道孚县| 尚志市| 惠水县| 仙游县| 昭通市| 北宁市| 历史| 江川县| 疏附县| 临西县| 驻马店市| 芦山县| 右玉县| 新疆| 乌鲁木齐县| 竹溪县| 咸宁市| 澎湖县| 景泰县| 元阳县| 信阳市| 富锦市| 双牌县| 天全县| 曲水县| 襄汾县| 上高县| 上饶市| 平乐县| 尖扎县| 丰台区| 五家渠市| 仙游县| 犍为县| 老河口市| 噶尔县| 青河县| 新巴尔虎右旗| 开鲁县| 宣武区|