zoukankan      html  css  js  c++  java
  • 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; }
        }
    }
    

      

  • 相关阅读:
    Centos7 安装zabbix3.0 服务端 详细
    kubernetes 创建nginx 容器
    kubernetes 创建tomcat 容器
    kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决
    SpringMVC,SpringBoot利用ajax上传文件到后台
    SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台
    IDEA修改显示星号*和热部署
    IDEA上的项目托管到码云步骤
    java代码块,静态代码块,静态变量,构造方法执行顺序
    java 动态绑定 多态
  • 原文地址:https://www.cnblogs.com/sunkaixuan/p/4564799.html
Copyright © 2011-2022 走看看