亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

可靈活擴展的自定義Session狀態存儲驅動

2019-11-17 01:32:24
字體:
來源:轉載
供稿:網友

可靈活擴展的自定義session狀態存儲驅動

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

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

SessionIDManager

/// <summary>    /// 自定義SessionID管理器    /// </summary>    public class CustomSessionIDManager : SessionIDManager    {        /// <summary>        /// 創建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方法提供了創建SessionID的實現,重載該方法,用{0}.{1}的方式提供基于前綴的SessionID生成。而Validate是拆解帶前綴的SessionID來驗證真實的SessionID。

SessionStateStoreProviderBase

/// <summary>    /// 自定義Session狀態存儲驅動    /// </summary>    public sealed class CustomSessionStateStoreProvider : SessionStateStoreProviderBase    {        /// <summary>        /// 構造函數        /// </summary>        public CustomSessionStateStoreProvider()        {            sessionStateStoreBehavior = SessionProviderBehaviorFactory.CreateSessionStateStoreBehaviorInstance();        }        /// <summary>        /// Session狀態存儲行為        /// </summary>        readonly ISessionStateStoreBehavior sessionStateStoreBehavior;        /// <summary>        /// 創建新的存儲數據        /// </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>        /// 創建未初始化的項        /// </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>        /// 重設項的超時時間        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        public override void ResetItemTimeout(System.Web.HttpContext context, string id)        {            sessionStateStoreBehavior.ResetItemTimeout(context, id);        }        /// <summary>        /// 獨占設置并釋放項        /// </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>        /// 結束請求        /// </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>        /// 設置項過期回掉        /// </summary>        /// <param name="expireCallback"></param>        /// <returns></returns>        public override bool SetItemExpireCallback(SessionStateItemExpireCallback expireCallback) { return false; }    }

SessionStateStoreProviderBase是提供Session狀態存儲驅動的基類。從基類分析,想要靈活擴展,核心就是對Session存儲的那些方法實現進行抽象,讓驅動在執行方法的時候不關心實現由誰來提供。因此,寫一個SessionStateStoreBehavior接口,在CustomSessionStateStoreProvider的構造函數中,通過工廠在運行時得到實例。

SessionStateStoreBehavior

/// <summary>    /// Session狀態存儲行為接口    /// </summary>    public interface ISessionStateStoreBehavior    {        /// <summary>        /// 創建未初始化的項        /// </summary>        /// <param name="context"></param>        /// <param name="id"></param>        /// <param name="timeout"></param>        void CreateUninitializedItem(System.Web.HttpContext context, string id, int t
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲一区二区三区在线观看| 欧美激情免费在线| 国产精品欧美风情| 国产91色在线免费| 国产精品美女主播| 亚洲欧洲一区二区三区在线观看| 国产精品扒开腿做爽爽爽男男| 久久人91精品久久久久久不卡| 欧美精品久久久久| 亚洲va国产va天堂va久久| 91精品国产综合久久香蕉的用户体验| 国产精品久久久久久久天堂| 黑人狂躁日本妞一区二区三区| 久久国产精品久久国产精品| 亚洲精品欧美极品| 亚洲精品久久7777777| 久久国产精品影片| 久久久久久久国产精品| 97在线观看免费高清| 久久九九全国免费精品观看| 91色视频在线导航| 日韩精品久久久久久福利| 国产精品激情自拍| 97精品国产97久久久久久春色| 欧美放荡办公室videos4k| 欧美高清videos高潮hd| 日韩在线免费观看视频| 亚洲欧美制服第一页| 亚洲白虎美女被爆操| 国产suv精品一区二区| 欧美精品福利视频| 日韩视频欧美视频| 神马久久桃色视频| 亚洲自拍偷拍区| 久久久久久久久久久亚洲| 色偷偷偷亚洲综合网另类| 国产精品激情av电影在线观看| 久久久久久久久久国产精品| 国产精品久久精品| 91九色视频导航| 亚洲天堂av在线播放| 欧美精品18videos性欧美| 日韩亚洲精品视频| 97免费中文视频在线观看| 国产一区二区三区免费视频| 亚洲高清一二三区| 色偷偷偷亚洲综合网另类| 久久久电影免费观看完整版| 一本色道久久88精品综合| 国产精品v日韩精品| 国产精品久久久久久av| 亚洲专区中文字幕| 欧美日韩aaaa| 欧美与黑人午夜性猛交久久久| 最近2019中文字幕大全第二页| 日韩高清av一区二区三区| 久久不射热爱视频精品| 一本一本久久a久久精品牛牛影视| 国产欧美日韩中文字幕在线| 亚洲精品按摩视频| 亚洲黄在线观看| 欧美亚洲另类在线| 国产日韩欧美中文| 欧洲成人免费视频| 国内精品久久久久伊人av| 亚洲综合中文字幕在线| 欧美成aaa人片在线观看蜜臀| 国产精品国内视频| 国产欧美 在线欧美| 91在线中文字幕| 欧美肥老妇视频| 久久不射电影网| 欧日韩不卡在线视频| 中文字幕欧美日韩va免费视频| 欧洲亚洲免费视频| 亚洲无线码在线一区观看| 亚洲国产成人久久| 日韩av观看网址| 国产精品观看在线亚洲人成网| 亚洲理论片在线观看| 美女av一区二区三区| 久久久久久久网站| 国产精品久久久久久久久久免费| 免费97视频在线精品国自产拍| 国产成人高清激情视频在线观看| 国产精品稀缺呦系列在线| 国模叶桐国产精品一区| 精品国产一区二区三区久久狼5月| 亚洲国产97在线精品一区| 成人在线精品视频| 富二代精品短视频| 国内伊人久久久久久网站视频| www.精品av.com| 欧美日韩国产一区二区三区| 亚洲一区av在线播放| 日本高清视频精品| 亚洲精品自产拍| 国产精品午夜国产小视频| 成人av在线亚洲| 国产精品普通话| 国产成人精品免费久久久久| 精品视频—区二区三区免费| 亚洲欧美激情另类校园| 国产日韩综合一区二区性色av| 日本在线精品视频| 精品国偷自产在线视频| 欧美老女人在线视频| 亚洲小视频在线观看| 国外成人在线直播| 成人黄色av免费在线观看| 欧美超级乱淫片喷水| 少妇久久久久久| 日韩精品久久久久久福利| 成人黄色免费在线观看| 一区二区三区精品99久久| 国产日韩精品视频| 色综合亚洲精品激情狠狠| 国产一区二区三区丝袜| 亚洲男人天天操| 成人乱人伦精品视频在线观看| 亚洲精品资源美女情侣酒店| 久久久精品999| 国产精品99久久久久久白浆小说| 欧美猛交ⅹxxx乱大交视频| 在线播放精品一区二区三区| 欧美性猛交视频| 色妞久久福利网| 国产午夜精品麻豆| 国产精品视频专区| 欧美日韩综合视频网址| 久久久久久12| 亚洲精品美女在线观看| 精品一区二区三区四区| 91久久精品日日躁夜夜躁国产| 热99精品只有里视频精品| 亚洲理论在线a中文字幕| 91在线视频一区| 最近2019中文免费高清视频观看www99| 亚洲另类欧美自拍| 欧美成人激情视频| 国产精品视频网| 中文字幕国产亚洲2019| 欧美特级www| 最近更新的2019中文字幕| 欧美激情欧美激情| 91精品免费视频| 欧美高清自拍一区| 欧美与黑人午夜性猛交久久久| 日韩欧美精品中文字幕| 欧美日韩亚洲视频一区| 国产成人激情视频| 色青青草原桃花久久综合| 国产精品入口夜色视频大尺度| 69国产精品成人在线播放| 欧美有码在线观看| 久久久免费电影| 91亚洲精品在线| 亚洲国产日韩欧美在线99| 国产精品精品久久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 日韩电影中文 亚洲精品乱码| 色偷偷综合社区| 欧美日韩成人免费| 成人春色激情网|