C#语法糖之Cookies操作类 asp.net

用法:

 

   //声名一个数据集合
            var listString = new List<string>() { "a", "b", "c" };
            //缓存key
            string key = "cokey";

            //获取实例
            var cookiesManager = CookiesManager<List<string>>.GetInstance();

            //插入缓存
            cookiesManager.Add(key, listString, cookiesManager.Minutes * 30);//过期30分钟 
            //add有其它重载 上面是最基本的

            //获取
            List<string> cookiesList = cookiesManager[key];

            //其它方法
            cookiesManager.ContainsKey(key);

            cookiesManager.Remove(key);//删除

            cookiesManager.RemoveAll(c => c.Contains("sales_"));//删除key包含sales_的cookies

            cookiesManager.GetAllKey();//获取所有key

  

 

 

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace SyntacticSugar
{

    /// <summary>
    /// ** 描述:cookies操作类
    /// ** 创始时间:2015-6-9
    /// ** 修改时间:-
    /// ** 作者:sunkaixuan
    /// ** 使用说明:
    /// </summary>
    /// <typeparam name="V">值</typeparam>
    public class CookiesManager<V> : IHttpStorageObject<V>
    {

        #region 全局变量
        private static CookiesManager<V> _instance = null;
        private static readonly object _instanceLock = new object();
        #endregion

        /// <summary>         
        /// 获取实例 (单例模式)       
        /// </summary>         
        /// <returns></returns>         
        public static CookiesManager<V> GetInstance()
        {
            if (_instance == null)
                lock (_instanceLock)
                    if (_instance == null)
                        _instance = new CookiesManager<V>();
            return _instance;
        }


        /// <summary>
        /// 添加cookies ,注意value最大4K (默认1天)
        /// </summary>
        /// <param name="key">key</param>
        /// <param name="value">value</param>
        public override void Add(string key, V value)
        {
            Add(key, value, Day);
        }
        /// <summary>
        /// 添加cookies ,注意value最大4K
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="cookiesDurationInSeconds">有效时间单位秒</param>
        public void Add(string key, V value, int cookiesDurationInSeconds)
        {
            HttpResponse response = HttpContext.Current.Response;
            if (response != null)
            {
                HttpCookie cookie = response.Cookies[key];
                if (cookie != null)
                {
                    if (typeof(V) == typeof(string))
                    {
                        string setValue = value.ToString();
                        Add(key, cookiesDurationInSeconds, cookie, setValue, response);
                    }
                    else
                    {
                        System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
                        string setValue = jss.Serialize(value);
                        Add(key, cookiesDurationInSeconds, cookie, setValue, response);

                    }
                }
            }
        }

        private void Add(string key, int cookiesDurationInSeconds, HttpCookie cookie, string setValue, HttpResponse response)
        {
            if (!string.IsNullOrEmpty(key) && cookie.HasKeys)
                cookie.Values.Set(key, setValue);
            else
                if (!string.IsNullOrEmpty(setValue))
                    cookie.Value = setValue;
            if (cookiesDurationInSeconds > 0)
                cookie.Expires = DateTime.Now.AddSeconds(cookiesDurationInSeconds);
            response.SetCookie(cookie);
        }

        public override bool ContainsKey(string key)
        {
            return Get(key) != null;
        }

        public override V Get(string key)
        {
            string value = string.Empty;
            if (context.Request.Cookies[key] != null)
                value = context.Request.Cookies[key].Value;
            if (typeof(V) == typeof(string))
            {
                return (V)Convert.ChangeType(value, typeof(V));
            }
            else
            {
                System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
                return jss.Deserialize<V>(value);
            }
        }

        public override IEnumerable<string> GetAllKey()
        {
            var allKeyList = context.Request.Cookies.AllKeys.ToList();
            foreach (var key in allKeyList)
            {
                yield return key;
            }
        }

        public override void Remove(string key)
        {
            HttpRequest request = HttpContext.Current.Request;
            if (request != null)
            {
                HttpCookie cookie = request.Cookies[key];
                cookie.Expires = DateTime.Now.AddDays(-1);
                if (cookie != null)
                {
                    if (!string.IsNullOrEmpty(key) && cookie.HasKeys)
                        cookie.Values.Remove(key);
                    else
                        request.Cookies.Remove(key);
                }
            }
        }

        public override void RemoveAll()
        {
            foreach (var key in GetAllKey())
            {
                Remove(key);
            }
        }

        public override void RemoveAll(Func<string, bool> removeExpression)
        {
            var removeList = GetAllKey().Where(removeExpression).ToList();
            foreach (var key in removeList)
            {
                Remove(key);
            }
        }

        public override V this[string key]
        {
            get { return Get(key); }
        }
    }
}

  

using System;
namespace SyntacticSugar
{
    public abstract class IHttpStorageObject<V>
    {

        public int Minutes = 60;
        public int Hour = 60 * 60;
        public int Day = 60 * 60 * 24;
        public System.Web.HttpContext context = System.Web.HttpContext.Current;
        public abstract void Add(string key, V value);
        public abstract bool ContainsKey(string key);
        public abstract V Get(string key);
        public abstract global::System.Collections.Generic.IEnumerable<string> GetAllKey();
        public abstract void Remove(string key);
        public abstract void RemoveAll();
        public abstract void RemoveAll(Func<string, bool> removeExpression);
        public abstract V this[string key] { get; }
    }
}

  

posted @ 2015-06-09 22:50  阿妮亚  阅读(1390)  评论(2编辑  收藏  举报