62,074
社区成员
发帖
与我相关
我的任务
分享
private static DateTime? 上一次清理时间;
[quote]
这个问号是什么意思?private static DateTime? 上一次清理时间;
public static void 清理过期会话记录()
{
if (上一次清理时间.HasValue && DateTime.Now.Subtract(上一次清理时间.Value) > TimeSpan.FromHours(200))
{
上一次清理时间 = DateTime.Now;
var sql = "delete from [会话记录] where [最后访问时间]<'" + DateTime.Now.AddHours(-12).ToString("yyyy-MM-dd HH:mm:ss") + "'";
Execute(sql);
var sid= HttpContext.Current.Session.SessionID;
sql= "if exists(select * from [会话记录] where SessionID='"+ sid +
"') update [最后访问时间]=getdate() else insert ......"; //这里自己补充
Execute(sql);
}
}
这里,每隔200分钟才清理一下,而且一次仅仅删除12小时以前的记录。你可以自己调整这两个参数private static DateTime? 上一次清理时间;
public static void 清理过期会话记录()
{
if (上一次清理时间.HasValue && DateTime.Now.Subtract(上一次清理时间.Value) > TimeSpan.FromHours(12))
{
var sql = "delete from [会话记录] where [最后访问时间]<'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'";
Execute(sql);
var sid= HttpContext.Current.Session.SessionID;
sql= "if exists(select * from [会话记录] where SessionID='"+ sid +
"') update [最后访问时间]=getdate() else insert ......"; //这里自己补充
Execute(sql);
上一次清理时间 = DateTime.Now;
}
}
public static Dictionary<string,MyUserInfo> MySessions= new Dictionary<string,MyUserInfo>();
这样的一个静态变量,用来保存没一个sessionId(string类型)对应的用户运行信息(自定义的MyUserInfo类型,例如其属性可以包括“用户名、用户所在部门、用户授权、购物车、最后一次访问时间.....”等等信息。
但是要知道,asp.net进程经常会“丢失”所有的内存数据,一切都会自动清空了。因此其实上述这种设计看上去很简单,其实在真实的生产环境中不成立。
因此你可以以数据库保存信息为根据。首先把这里的MySessions数据定义到关系数据库中,例如有“SessionID,用户名,部门名,授权集合ID号,购物车ID号,最后一次访问时间.....”等字段。然后就可以轻松地开始你的程序设计。
并且你的程序可以每隔一段时间自动把那些超时的数据记录(例如“最后一次访问时间”距离当前时间超过2分钟、或者超过12小时的)删除掉。
然后当上线之前,把有关调用数据库操作的BLL层代码,进行性能优化。也就是当查询时,可以是先从数据缓冲(例如 System.Caching.Cache 类型)系统中读取,如果找不到才真正读取数据库。不过数据缓冲系统只是用来优化的,丝毫也撼动不了根基。根基就是要使用数据库来管理这些看似临时的数据。