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; }
        }
    }
  • 相关阅读:
    北京燃气IC卡充值笔记
    随机分析、随机控制等科目在量化投资、计算金融方向有哪些应用?
    量化交易平台大全
    Doctor of Philosophy in Computational and Mathematical Engineering
    Institute for Computational and Mathematical Engineering
    Requirements for the Master of Science in Computational and Mathematical Engineering
    MSc in Mathematical and Computational Finance
    万字长文:详解多智能体强化学习的基础和应用
    数据处理思想和程序架构: 使用Mbedtls包中的SSL,和服务器进行网络加密通信
    31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)
  • 原文地址:https://www.cnblogs.com/jameslif/p/6831181.html
Copyright © 2011-2022 走看看