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; }
    }
}
时间: 2024-10-15 17:15:46

Cookies操作类的相关文章

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

用法: //声名一个数据集合 var listString = new List<string>() { "a", "b", "c" }; //缓存key string key = "cokey"; //获取实例 var cookiesManager = CookiesManager<List<string>>.GetInstance(); //插入缓存 cookiesManager.Add

.NET常用工具类——COOKIES操作类

using System;using System.Collections;using System.Collections.Generic;using System.Collections.Specialized;using System.Text;using System.Web;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.We

【.NET】Cookie操作类

using System; using System.Web; using System.Data; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Text; namespace Tool { /// <summary> /// Cookie操作类 /// </summary> public static c

Cookie操作类 实现记住用户名和密码的功能

import java.util.Hashtable;import java.util.Iterator;import java.util.Set;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Cookie的操作类 * * */public class CookieHandler {/

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

因为考虑到我下面我将写session cookies 等 操作类 ,与cache具有共性. 所以都统一继承了IHttpStorageObject  abstract class 来保函数风格的统一 ,但是又为了调用方便,抽象中又使用了单例来简化调用. 使用方法很简单: //声名一个数据集合 var listString = new List<string>() { "a", "b", "c" }; //缓存key string key

ASP.net如何保证EF操作类线程内唯一

说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实现原理也是通过数据槽callcontext) 将EF操作类通过键值对方法保存在HttpContext.Current.Items["key"],封装成方法直接调用 2.callcontext public static DbContext CreateDbContext() { DbCon

反射之操作类,方法,属性等

1.操作类 获取类,并通过反射获取一个实例对象 Class class1 = Student.class; Student student = (Student)class1.newInstance();   //默认调用无参数的构造方法 student.setName("heh"); System.out.println(student.getName()); 2.操作构造方法   获取指定参数类型的构造方法,通过此对象创建一个特定参数值的实例对象 Class class1 = St

Android打造属于自己的数据库操作类。

1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要去做增删改查的操作的时候,就得通过getWritableDatabase获取一个SQLiteDataBase然后老老实实去写操作值的put以及查询返回的Cursor处理,其实我们可以搞一个对象来帮我们干这些事情,打造属于你自己的数据库操作类. 2.操作类的初显形 假设现在我们什么都没有,我们要去搞一

使用RedisTemplate的操作类访问Redis(转载)

原文地址:http://www.cnblogs.com/luochengqiuse/p/4641256.html private ValueOperations<K, V> valueOps; private ListOperations<K, V> listOps; private SetOperations<K, V> setOps; private ZSetOperations<K, V> zSetOps; 1. RedisOperations接口说明