zoukankan      html  css  js  c++  java
  • 实现自定义Session

    1. 回话状态接口

     /// <summary>
        /// 会话状态策略接口
        /// </summary>
        public partial interface ISessionStrategy
        {
            /// <summary>
            /// 过期时间(单位为秒)
            /// </summary>
            int Timeout { get; }
    
            /// <summary>
            /// 获得用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            /// <returns>Dictionary<string,object>类型</returns>
            Dictionary<string,object> GetSession(string sid);
    
            /// <summary>
            /// 移除用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            void RemoverSession(string sid);
    
            /// <summary>
            /// 获得用户会话状态数据的数据项的值
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <returns>当前键值不存在时返回null</returns>
            object GetValue(string sid, string key);
    
            /// <summary>
            /// 设置用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            void SetItem(string sid, string key, object value);
    
            /// <summary>
            /// 移除用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            void RemoveItem(string sid, string key);
        }

    2.接口实现

    /// <summary>
        /// 基于Asp.Net缓存的会话状态策略
        /// </summary>
        public partial class SessionStrategy : ISessionStrategy
        {
            private Cache _cache;//Asp.Net缓存
            private int _timeout = 600;//过期时间(单位为秒)
    
            public SessionStrategy()
            {
                _cache = HttpRuntime.Cache;
            }
    
            /// <summary>
            /// 过期时间(单位为秒)
            /// </summary>
            /// <value></value>
            public int Timeout
            {
                get { return _timeout; }
            }
    
            /// <summary>
            /// 获得用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            /// <returns>Dictionary<string,object>类型</returns>
            public Dictionary<string, object> GetSession(string sid)
            {
                object session = _cache.Get(sid);
                if (session != null)
                    return (Dictionary<string, object>)session;
    
                Dictionary<string, object> s = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
                _cache.Insert(sid, s, null, DateTime.Now.AddSeconds(_timeout), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
                return s;
            }
    
            /// <summary>
            /// 移除用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            public void RemoverSession(string sid)
            {
                _cache.Remove(sid);
            }
    
            /// <summary>
            /// 获得用户会话状态数据的数据项的值
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <returns>当前键值不存在时返回null</returns>
            public object GetValue(string sid, string key)
            {
                object session = _cache.Get(sid);
                if (session == null)
                {
                    return null;
                }
                else
                {
                    Dictionary<string, object> s = (Dictionary<string, object>)session;
                    object value = null;
                    s.TryGetValue(key, out value);
                    return value;
                }
            }
    
            /// <summary>
            /// 设置用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public void SetItem(string sid, string key, object value)
            {
                Dictionary<string, object> session = GetSession(sid);
                if (session.ContainsKey(key))
                    session[key] = value;
                else
                    session.Add(key, value);
            }
    
            /// <summary>
            /// 移除用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            public void RemoveItem(string sid, string key)
            {
                object session = _cache.Get(sid);
                if (session != null)
                {
                    Dictionary<string, object> s = (Dictionary<string, object>)session;
                    s.Remove(key);
                }
            }
        }

    3.服务层调用

    /// <summary>
        /// 会话状态操作管理类
        /// </summary>
        public partial class Sessions
        {
            private static ISessionStrategy _isessionstrategy = null;//会话状态策略
    
            static Sessions()
            {
                _isessionstrategy = BMASession.Instance;
            }
    
            /// <summary>
            /// 生成sessionid
            /// </summary>
            /// <returns></returns>
            public static string GenerateSid()
            {
                long i = 1;
                byte[] byteArray = Guid.NewGuid().ToByteArray();
                foreach (byte b in byteArray)
                {
                    i *= ((int)b + 1);
                }
                return string.Format("{0:x}", i - DateTime.Now.Ticks);
            }
    
            /// <summary>
            /// 过期时间(单位为秒)
            /// </summary>
            /// <value></value>
            public static int Timeout
            {
                get { return _isessionstrategy.Timeout; }
            }
    
            /// <summary>
            /// 获得用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            /// <returns>Dictionary<string,object>类型</returns>
            public static Dictionary<string, object> GetSession(string sid)
            {
                return _isessionstrategy.GetSession(sid);
            }
    
            /// <summary>
            /// 移除用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            public static void RemoverSession(string sid)
            {
                _isessionstrategy.RemoverSession(sid);
            }
    
            /// <summary>
            /// 获得用户会话状态数据的数据项的值
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <returns>当前键值不存在时返回null</returns>
            public static object GetValue(string sid, string key)
            {
                if (!string.IsNullOrEmpty(key))
                    return _isessionstrategy.GetValue(sid, key);
                else
                    return null;
            }
    
            /// <summary>
            /// 获得用户会话状态数据的数据项的值
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <returns></returns>
            public static int GetValueInt(string sid, string key)
            {
                return TypeHelper.ObjectToInt(GetValue(sid, key));
            }
    
            /// <summary>
            /// 获得用户会话状态数据的数据项的值
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <returns></returns>
            public static string GetValueString(string sid, string key)
            {
                object value = GetValue(sid, key);
                if (value != null)
                    return value.ToString();
                else
                    return string.Empty;
            }
    
            /// <summary>
            /// 设置用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void SetItem(string sid, string key, object value)
            {
                if (!string.IsNullOrEmpty(key))
                    _isessionstrategy.SetItem(sid, key, value);
            }
    
            /// <summary>
            /// 移除用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            public static void RemoveItem(string sid, string key)
            {
                if (!string.IsNullOrEmpty(key))
                    _isessionstrategy.RemoveItem(sid, key);
            }
        }
    
    
        /// <summary>
        /// session键类
        /// </summary>
        public partial class SessionKey
        {
            /// <summary>
            /// 图片验证码
            /// </summary>
            public const string VERIFYIMAGEVALUE = "verifyImageValue";
            /// <summary>
            /// 安全中心手机验证值
            /// </summary>
            public const string SAFEVERIFYMOBILEVALUE = "safeVerifyMoibleValue";
            /// <summary>
            /// 安全中心更新手机值
            /// </summary>
            public const string UPDATEMOBILEVALUE = "updateMoibleValue";
            /// <summary>
            /// 安全中心更新手机
            /// </summary>
            public const string UPDATEMOBILE = "updateMoible";
            /// <summary>
            /// 安全中心验证密码动作
            /// </summary>
            public const string VALIDATEPASSWORD = "validatePassword";
            /// <summary>
            /// 安全中心验证手机动作
            /// </summary>
            public const string VALIDATEMOBILE = "validateMobile";
            /// <summary>
            /// 安全中心验证邮箱动作
            /// </summary>
            public const string VALIDATEEMAIL = "validateEmail";
        }

    4. 简洁版:

      /// <summary>
        /// 基于Asp.Net缓存的会话状态策略
        /// </summary>
        public partial class SessionStrategy 
        {
            private Cache _cache;//Asp.Net缓存
            private int _timeout = 600;//过期时间(单位为秒)
    
            public SessionStrategy()
            {
                _cache = HttpRuntime.Cache;
            }
    
            /// <summary>
            /// 生成sessionid
            /// </summary>
            /// <returns></returns>
            public static string GenerateSid()
            {
                long i = 1;
                byte[] byteArray = Guid.NewGuid().ToByteArray();
                foreach (byte b in byteArray)
                {
                    i *= ((int)b + 1);
                }
                return string.Format("{0:x}", i - DateTime.Now.Ticks);
            }
    
            /// <summary>
            /// 过期时间(单位为秒)
            /// </summary>
            /// <value></value>
            public int Timeout
            {
                get { return _timeout; }
            }
    
            /// <summary>
            /// 获得用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            /// <returns>Dictionary<string,object>类型</returns>
            public Dictionary<string, object> GetSession(string sid)
            {
                object session = _cache.Get(sid);
                if (session != null)
                    return (Dictionary<string, object>)session;
    
                Dictionary<string, object> s = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
                _cache.Insert(sid, s, null, DateTime.Now.AddSeconds(_timeout), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
                return s;
            }
    
            /// <summary>
            /// 移除用户会话状态数据
            /// </summary>
            /// <param name="sid">sid</param>
            public void RemoverSession(string sid)
            {
                _cache.Remove(sid);
            }
    
            /// <summary>
            /// 获得用户会话状态数据的数据项的值
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <returns>当前键值不存在时返回null</returns>
            public object GetValue(string sid, string key)
            {
                object session = _cache.Get(sid);
                if (session == null)
                {
                    return null;
                }
                else
                {
                    Dictionary<string, object> s = (Dictionary<string, object>)session;
                    object value = null;
                    s.TryGetValue(key, out value);
                    return value;
                }
            }
    
            /// <summary>
            /// 设置用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public void SetItem(string sid, string key, object value)
            {
                Dictionary<string, object> session = GetSession(sid);
                if (session.ContainsKey(key))
                    session[key] = value;
                else
                    session.Add(key, value);
            }
    
            /// <summary>
            /// 移除用户会话状态数据的数据项
            /// </summary>
            /// <param name="sid">sid</param>
            /// <param name="key"></param>
            public void RemoveItem(string sid, string key)
            {
                object session = _cache.Get(sid);
                if (session != null)
                {
                    Dictionary<string, object> s = (Dictionary<string, object>)session;
                    s.Remove(key);
                }
            }
        }
    
        /// <summary>
        /// session键类(根据实际情况定义)
        /// </summary>
        public partial class SessionKey
        {
            /// <summary>
            /// 图片验证码
            /// </summary>
            public const string VERIFYIMAGEVALUE = "verifyImageValue";
            /// <summary>
            /// 安全中心手机验证值
            /// </summary>
            public const string SAFEVERIFYMOBILEVALUE = "safeVerifyMoibleValue";
            /// <summary>
            /// 安全中心更新手机值
            /// </summary>
            public const string UPDATEMOBILEVALUE = "updateMoibleValue";
            /// <summary>
            /// 安全中心更新手机
            /// </summary>
            public const string UPDATEMOBILE = "updateMoible";
            /// <summary>
            /// 安全中心验证密码动作
            /// </summary>
            public const string VALIDATEPASSWORD = "validatePassword";
            /// <summary>
            /// 安全中心验证手机动作
            /// </summary>
            public const string VALIDATEMOBILE = "validateMobile";
            /// <summary>
            /// 安全中心验证邮箱动作
            /// </summary>
            public const string VALIDATEEMAIL = "validateEmail";
        }
  • 相关阅读:
    获取代理服务器ip列表的方法
    司机奖励新政策:失去的奖励还能再回来!
    成都Uber优步司机奖励政策(2月24日)
    北京Uber优步司机奖励政策(2月24日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(2月24日)
    成都Uber优步司机奖励政策(2月23日)
    北京Uber优步司机奖励政策(2月23日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(2月23日)
    Android Studio 模拟器启动问题——黑屏 死机 解决方法
    MYSQL使用mysqldump导出某个表的部分数据
  • 原文地址:https://www.cnblogs.com/fuqiang88/p/6607630.html
Copyright © 2011-2022 走看看