1. 回话状态接口

 /// <summary>
/// 会话状态策略接口
/// </summary>
public partial interface ISessionStrategy
{
/// <summary>
/// 过期时间(单位为秒)
/// </summary>
int Timeout { get; } /// <summary>
/// 获得用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
/// <returns>Dictionary<string,object>类型</returns>
Dictionary<string,object> GetSession(string sid); /// <summary>
/// 移除用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
void RemoverSession(string sid); /// <summary>
/// 获得用户会话状态数据的数据项的值
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <returns>当前键值不存在时返回null</returns>
object GetValue(string sid, string key); /// <summary>
/// 设置用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
void SetItem(string sid, string key, object value); /// <summary>
/// 移除用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
void RemoveItem(string sid, string key);
}

2.接口实现

/// <summary>
/// 基于Asp.Net缓存的会话状态策略
/// </summary>
public partial class SessionStrategy : ISessionStrategy
{
private Cache _cache;//Asp.Net缓存
private int _timeout = ;//过期时间(单位为秒) public SessionStrategy()
{
_cache = HttpRuntime.Cache;
} /// <summary>
/// 过期时间(单位为秒)
/// </summary>
/// <value></value>
public int Timeout
{
get { return _timeout; }
} /// <summary>
/// 获得用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
/// <returns>Dictionary<string,object>类型</returns>
public Dictionary<string, object> GetSession(string sid)
{
object session = _cache.Get(sid);
if (session != null)
return (Dictionary<string, object>)session; Dictionary<string, object> s = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
_cache.Insert(sid, s, null, DateTime.Now.AddSeconds(_timeout), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
return s;
} /// <summary>
/// 移除用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
public void RemoverSession(string sid)
{
_cache.Remove(sid);
} /// <summary>
/// 获得用户会话状态数据的数据项的值
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <returns>当前键值不存在时返回null</returns>
public object GetValue(string sid, string key)
{
object session = _cache.Get(sid);
if (session == null)
{
return null;
}
else
{
Dictionary<string, object> s = (Dictionary<string, object>)session;
object value = null;
s.TryGetValue(key, out value);
return value;
}
} /// <summary>
/// 设置用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
public void SetItem(string sid, string key, object value)
{
Dictionary<string, object> session = GetSession(sid);
if (session.ContainsKey(key))
session[key] = value;
else
session.Add(key, value);
} /// <summary>
/// 移除用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
public void RemoveItem(string sid, string key)
{
object session = _cache.Get(sid);
if (session != null)
{
Dictionary<string, object> s = (Dictionary<string, object>)session;
s.Remove(key);
}
}
}

3.服务层调用

/// <summary>
/// 会话状态操作管理类
/// </summary>
public partial class Sessions
{
private static ISessionStrategy _isessionstrategy = null;//会话状态策略 static Sessions()
{
_isessionstrategy = BMASession.Instance;
} /// <summary>
/// 生成sessionid
/// </summary>
/// <returns></returns>
public static string GenerateSid()
{
long i = ;
byte[] byteArray = Guid.NewGuid().ToByteArray();
foreach (byte b in byteArray)
{
i *= ((int)b + );
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
} /// <summary>
/// 过期时间(单位为秒)
/// </summary>
/// <value></value>
public static int Timeout
{
get { return _isessionstrategy.Timeout; }
} /// <summary>
/// 获得用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
/// <returns>Dictionary<string,object>类型</returns>
public static Dictionary<string, object> GetSession(string sid)
{
return _isessionstrategy.GetSession(sid);
} /// <summary>
/// 移除用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
public static void RemoverSession(string sid)
{
_isessionstrategy.RemoverSession(sid);
} /// <summary>
/// 获得用户会话状态数据的数据项的值
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <returns>当前键值不存在时返回null</returns>
public static object GetValue(string sid, string key)
{
if (!string.IsNullOrEmpty(key))
return _isessionstrategy.GetValue(sid, key);
else
return null;
} /// <summary>
/// 获得用户会话状态数据的数据项的值
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <returns></returns>
public static int GetValueInt(string sid, string key)
{
return TypeHelper.ObjectToInt(GetValue(sid, key));
} /// <summary>
/// 获得用户会话状态数据的数据项的值
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <returns></returns>
public static string GetValueString(string sid, string key)
{
object value = GetValue(sid, key);
if (value != null)
return value.ToString();
else
return string.Empty;
} /// <summary>
/// 设置用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
public static void SetItem(string sid, string key, object value)
{
if (!string.IsNullOrEmpty(key))
_isessionstrategy.SetItem(sid, key, value);
} /// <summary>
/// 移除用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
public static void RemoveItem(string sid, string key)
{
if (!string.IsNullOrEmpty(key))
_isessionstrategy.RemoveItem(sid, key);
}
} /// <summary>
/// session键类
/// </summary>
public partial class SessionKey
{
/// <summary>
/// 图片验证码
/// </summary>
public const string VERIFYIMAGEVALUE = "verifyImageValue";
/// <summary>
/// 安全中心手机验证值
/// </summary>
public const string SAFEVERIFYMOBILEVALUE = "safeVerifyMoibleValue";
/// <summary>
/// 安全中心更新手机值
/// </summary>
public const string UPDATEMOBILEVALUE = "updateMoibleValue";
/// <summary>
/// 安全中心更新手机
/// </summary>
public const string UPDATEMOBILE = "updateMoible";
/// <summary>
/// 安全中心验证密码动作
/// </summary>
public const string VALIDATEPASSWORD = "validatePassword";
/// <summary>
/// 安全中心验证手机动作
/// </summary>
public const string VALIDATEMOBILE = "validateMobile";
/// <summary>
/// 安全中心验证邮箱动作
/// </summary>
public const string VALIDATEEMAIL = "validateEmail";
}

4. 简洁版:

  /// <summary>
/// 基于Asp.Net缓存的会话状态策略
/// </summary>
public partial class SessionStrategy
{
private Cache _cache;//Asp.Net缓存
private int _timeout = ;//过期时间(单位为秒) public SessionStrategy()
{
_cache = HttpRuntime.Cache;
} /// <summary>
/// 生成sessionid
/// </summary>
/// <returns></returns>
public static string GenerateSid()
{
long i = ;
byte[] byteArray = Guid.NewGuid().ToByteArray();
foreach (byte b in byteArray)
{
i *= ((int)b + );
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
} /// <summary>
/// 过期时间(单位为秒)
/// </summary>
/// <value></value>
public int Timeout
{
get { return _timeout; }
} /// <summary>
/// 获得用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
/// <returns>Dictionary<string,object>类型</returns>
public Dictionary<string, object> GetSession(string sid)
{
object session = _cache.Get(sid);
if (session != null)
return (Dictionary<string, object>)session; Dictionary<string, object> s = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
_cache.Insert(sid, s, null, DateTime.Now.AddSeconds(_timeout), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
return s;
} /// <summary>
/// 移除用户会话状态数据
/// </summary>
/// <param name="sid">sid</param>
public void RemoverSession(string sid)
{
_cache.Remove(sid);
} /// <summary>
/// 获得用户会话状态数据的数据项的值
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <returns>当前键值不存在时返回null</returns>
public object GetValue(string sid, string key)
{
object session = _cache.Get(sid);
if (session == null)
{
return null;
}
else
{
Dictionary<string, object> s = (Dictionary<string, object>)session;
object value = null;
s.TryGetValue(key, out value);
return value;
}
} /// <summary>
/// 设置用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
public void SetItem(string sid, string key, object value)
{
Dictionary<string, object> session = GetSession(sid);
if (session.ContainsKey(key))
session[key] = value;
else
session.Add(key, value);
} /// <summary>
/// 移除用户会话状态数据的数据项
/// </summary>
/// <param name="sid">sid</param>
/// <param name="key">键</param>
public void RemoveItem(string sid, string key)
{
object session = _cache.Get(sid);
if (session != null)
{
Dictionary<string, object> s = (Dictionary<string, object>)session;
s.Remove(key);
}
}
} /// <summary>
/// session键类(根据实际情况定义)
/// </summary>
public partial class SessionKey
{
/// <summary>
/// 图片验证码
/// </summary>
public const string VERIFYIMAGEVALUE = "verifyImageValue";
/// <summary>
/// 安全中心手机验证值
/// </summary>
public const string SAFEVERIFYMOBILEVALUE = "safeVerifyMoibleValue";
/// <summary>
/// 安全中心更新手机值
/// </summary>
public const string UPDATEMOBILEVALUE = "updateMoibleValue";
/// <summary>
/// 安全中心更新手机
/// </summary>
public const string UPDATEMOBILE = "updateMoible";
/// <summary>
/// 安全中心验证密码动作
/// </summary>
public const string VALIDATEPASSWORD = "validatePassword";
/// <summary>
/// 安全中心验证手机动作
/// </summary>
public const string VALIDATEMOBILE = "validateMobile";
/// <summary>
/// 安全中心验证邮箱动作
/// </summary>
public const string VALIDATEEMAIL = "validateEmail";
}

实现自定义Session的更多相关文章

  1. python_way ,自定义session

    python_way ,自定义session container = {} #可以是数据库,可以是缓存也可以是文件 class Session: def __init__(self, handler) ...

  2. 可灵活扩展的自定义Session状态存储驱动

    Session是互联网应用中非常重要的玩意儿,对于超过单台部署的站点集群,都会存在会话共享的需求.在web.config中,微软提供了sessionstate节点来定义不同的Session状态存储方式 ...

  3. Asp.net Mvc 自定义Session (二)

    在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...

  4. Asp.net Mvc 自定义Session (一),

    大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解  怎样 解决用户过多的session自动消亡,和分 ...

  5. 自定义session扫描器

    为何要自定义session扫描器 由于服务器来管理session的销毁不怎么靠谱,因此很多网站都会自己定义一个session扫描器来管理session的创建和销毁. 实现思路 首先,创建一个sessi ...

  6. 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

    从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了, ...

  7. Tronado自定义Session

    这里就不一一诉说Session和Cookie直接的关系了,下面以一张图来概括: 下面是一个简单的Tornaod自定义Session的例子,看完后你可能会明白为什么我们在Django里可以直接使用req ...

  8. 简单的自定义Session

    有关Session.Cookie机制建议参考文章:CookieSession机制详解,写的很详细,不再赘述 本篇文章通过一个简单的案例揭秘Session机制以及和Cookie的区别和联系: 服务器端代 ...

  9. Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架

    Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...

  10. Python web框架 Tornado(三)自定义session组件

    我们在学习Django框架的过程中,内部封装了session组件,以方便于我们使用进行验证.但是Tornado框架是没有session的,所以如果想使用session的话,就需要我们自己定制相对应的组 ...

随机推荐

  1. (转)mysql自增列导致主键重复问题分析

    mysql自增列导致主键重复问题分析...  原文:http://www.cnblogs.com/cchust/p/3914935.html 前几天开发童鞋反馈一个利用load data infile ...

  2. 常用chrome插件&&常用FireFox插件

    第一部分:chrome插件 chrome中输入  chrome://chrome-urls/   可以得到包括缓存在内的很多相关信息. 1.掘金chrome插件 点击下载 掘金是一个高质量的互联网技术 ...

  3. 使用mysqldump备份单表数据,并使用navicat导出单表中部分字段到excel

    今天工作上遇到一个问题,客户需要将生产环境上数据库中用户表中的用户名.登录名.邮箱三个字段导出到excel中,查了一下,分两个步骤完成了任务 1. 使用mysqldump命令将生产环境的user表备份 ...

  4. Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理

    token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...

  5. ruby:TypeError: 对象不支持此属性或方法(<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolink)

    我整理了一下 目前有三种方法,我是windows 7 64位, 答案中很多人是win8也成功了. 方法1:找到当前项目下 app/javascripts/applications.js  把里面的// ...

  6. php 按照二位数组中某个指定的字段进行排序

    /** * 按照二维数组中某个指定的某个字段进行排序 * @param $array 需要被排序的数组 * @param $flag 排序的标志 1,SORT_DESC 降序 2,SORT_ASC 升 ...

  7. JS浮点数精确计算方法

    function add(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch (f) ...

  8. 数据库-SQLite简介

    SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库(轻型数据库). 由于资源占用少.性能良好和零管理成本,嵌入式数据库有了它的用武之地,像Android.iPhone都有内置的S ...

  9. Python 开发

    1.GIL,CPython,Python跟编译器没关系,语言有多个编译器,如:JPython.IronPython等,其他语言如是.GIL对IO密集型友好,计算密集型惨淡 2.pass,定义空执行函数 ...

  10. HTTPClient 超时链接设置

    远程访问链接,设置时间,从而减少不必要的麻烦,但是HttpClient版本不一致,方法不一样,所以有了如下设置 原帖链接:https://www.cnblogs.com/jimmy-muyuan/p/ ...