用法:

   //声名一个数据集合
var listString = new List<string>() { "a", "b", "c" };
//session key
string key = "sekey"; //获取实例
var sessionManager = SessionManager<List<string>>.GetInstance(); //添加session
sessionManager.Add(key, listString);
//add有其它重载 上面是最基本的 //获取
List<string> sessionList = sessionManager[key]; //其它方法
sessionManager.ContainsKey(key); sessionManager.Remove(key);//删除 sessionManager.RemoveAll(c => c.Contains("sales_"));//删除key包含sales_的session sessionManager.GetAllKey();//获取所有key

  

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web; namespace SyntacticSugar
{
/// <summary>
/// ** 描述:session操作类
/// ** 创始时间:2015-6-9
/// ** 修改时间:-
/// ** 作者:sunkaixuan
/// ** 使用说明:
/// </summary>
/// <typeparam name="K">键</typeparam>
/// <typeparam name="V">值</typeparam>
public class SessionManager<V> : IHttpStorageObject<V>
{
private static readonly object _instancelock = new object();
private static SessionManager<V> _instance = null; public static SessionManager<V> GetInstance()
{
if (_instance == null)
{
lock (_instancelock)
{
if (_instance == null)
{
_instance = new SessionManager<V>();
}
} }
return _instance;
} public override void Add(string key, V value)
{
context.Session.Add(key, value);
} public override bool ContainsKey(string key)
{
return context.Session[key] != null;
} public override V Get(string key)
{
return (V)context.Session[key];
} public override IEnumerable<string> GetAllKey()
{
foreach (var key in context.Session.Keys)
{
yield return key.ToString();
}
} public override void Remove(string key)
{
context.Session[key] = null;
context.Session.Remove(key);
} public override void RemoveAll()
{
foreach (var key in GetAllKey())
{
Remove(key);
}
} public override void RemoveAll(Func<string, bool> removeExpression)
{
var allKeyList = GetAllKey().ToList();
var removeKeyList = allKeyList.Where(removeExpression).ToList();
foreach (var key in removeKeyList)
{
Remove(key);
}
} public override V this[string key]
{
get { return (V)context.Session[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; }
}
}

  

C#语法糖之 session操作类 asp.net的更多相关文章

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

    因为考虑到我下面我将写session cookies 等 操作类 ,与cache具有共性. 所以都统一继承了IHttpStorageObject  abstract class 来保函数风格的统一 , ...

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

    用法: //声名一个数据集合 var listString = new List<string>() { "a", "b", "c&quo ...

  3. session操作类

    using System;using System.Web; /// <summary> ///session操作类 /// </summary> public class a ...

  4. C# Session 操作类

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

  5. using语法糖

    资源的分类 首先说一下资源的分类: 托管资源:由CLR管理分配和释放资源 非托管资源:不受CLR管理的对象,如 文件(StreamReader,BinaryReader,DataTable,各种Str ...

  6. Session帮助类

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

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

    说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实 ...

  8. asp.net 类库中获取session c#类中获取session

    asp.net  类库中获取session c#类中获取session 1. 先引入命名空间 using System.Web; using System.Web.SessionState; 在使用H ...

  9. C#操作session的类实例

    本文实例讲述了C#操作session的类.分享给大家供大家参考.具体分析如下: 这个C#类对session操作进行了再次封装,可以大大简化session的常用操作,同时这个类可以将session值设置 ...

随机推荐

  1. cache 浅析

    http://blog.chinaunix.net/uid-26817832-id-3244916.html   1. Cache Cache一词来源于法语,其原意是"藏匿处,隐秘的地方&q ...

  2. 利用Android Studio、MAT对Android进行内存泄漏检测

    利用Android Studio.MAT对Android进行内存泄漏检测 Android开发中难免会遇到各种内存泄漏,如果不及时发现处理,会导致出现内存越用越大,可能会因为内存泄漏导致出现各种奇怪的c ...

  3. oracle 判断中文函数

    create or replace function func_chinese(  p_str     in varchar2,     -- 输入的字符串  p_code    in varchar ...

  4. android自定义seekBar

    Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子 很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如 ok,我们开始吧: 一)变换前背景 先来 ...

  5. GoldenGate 配置extract,replicat进程自启动

    在GoldenGate中主进程是manager进程,使用start mgr启动.可以在mgr进程中添加一些参数用来在启动mgr进程的同时启动extract和replicat进程 GGSCI (gg01 ...

  6. Lumia 830 win10m 启用触摸按键

    用了一年半的830疑似翘屏… 按键基本失灵 每次按的时候基本都是 appbar 那里有反映… 实在懒于换手机(主要是不想花钱…) 研究下怎么启用虚拟按键,还能再战几年… 启用虚拟按键 其实简单说法就是 ...

  7. LeetCode: Remove Nth Node From End of List 解题报告

    Remove Nth Node From End of List Total Accepted: 46720 Total Submissions: 168596My Submissions Quest ...

  8. c++中的&

    变量的前面表示取变量地址赋值给指针, 如:int a = 0; int *pa = &a;类型后面表示引用,引用即变量的替身. int a = 0; int &ref = a;操作re ...

  9. .NET Framework 高级开发

    .NET Framework 高级开发 MSDN 这部分帮助介绍与 .NET Framework 相关的高级编程主题. 本节内容 管理 介绍如何管理 Active Directory 中的对象,如何使 ...

  10. iOS开发之时间格式的转化

    在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理. 例如:如何将格式为“12-May-14 05.08.02.000000 PM” ...