zoukankan      html  css  js  c++  java
  • Cookies操作类

    实现代码:

    //声名一个数据集合
             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; }
        }
    }
  • 相关阅读:
    053-649
    053-648
    053-647
    053-646
    053-645
    053-644
    053-643
    053-642
    053-641
    053-640
  • 原文地址:https://www.cnblogs.com/jameslif/p/6831181.html
Copyright © 2011-2022 走看看