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";
        }
  • 相关阅读:
    properties文件不能输入中文
    java: bin里面的.class文件没有了怎么办
    LINUX 系统java自动化启动浏览器 提示:The driver is not executable: /home/pt/Downloads/googledriver/chromedriver_linux64/chromedriver
    MarkdownTest
    洛谷P5364 [SNOI2017]礼物 题解
    长链剖分
    左偏树(可并堆)
    Splay
    分层图最短路
    整体二分
  • 原文地址:https://www.cnblogs.com/fuqiang88/p/6607630.html
Copyright © 2011-2022 走看看