简单的实现了将Session的数据存储在Access中

        一直在研究怎样将Session的数据存放在SqlServer之外,增加对其他数据库的支持,简单的实现了使用Access存储Session变量。稍作变化,可以支持其他数据库。
        Asp.Net标记用户,使用的是SessionId,根据SessionId和Session的生存期来判读用户的状态。那么可以根据这2者来完成标记用户的处理。
       当前只是实现了存储值为字符串的Session变量。
       组成,主要由3部分:
       1.OracleHelper Class:最初写这个类,只是为了方便的操作Oracle,后来发现,如果使用OleDb访问数据库,那么可以扩展到访问其他数据库,如Access,只需要更改连接字符串,所以增加了访问Access的字符串,用来访问Access,只是还是使用了原先的名称。可以到http://www.cnblogs.com/Pierce/articles/200543.html查看代码,到OracleHelper Class下载。
       2.StateManage Class:封装的管理用户状态的类,可以出路Session,Cookie,Application,查询字符,ViewState,其中,ViewStateHelper只能获取ViewState的StateBag中的变量,不可以设置,无法将变量写入ViewState,哪位有解决办法,请多多赐教。同过继承SessionHelper类,增加方法,将设置的Session变量存储在Access中,不占用系统资源,访问Session变量时,使用继承的SessionHelper类的方法读取。查看代码:StateManage,下载https://files.cnblogs.com/Pierce/Pierce.StateManage.rar
      3.因为Access自身没有计划任务功能,所以需要在主程序中增加时间任务处理,完成Session生存期的处理。在Global文件中,Application_Start事件中定义计划任务并执行,在Application_End中停止计划任务,关于计划任务类的代码,借鉴Csdn的孟子E章。这是主要的测试程序,MySession,下载:https://files.cnblogs.com/Pierce/MySession.rar

     写了一个MySession用来测试,很简单,每次用户访问时,记录用户的IpAddress和Port,并可以存储用户设置的昵称到Session["username"]中,Access包括3个表,
UserSession:保存用户SessionId,访问时间,Session结束时间,可以根据这个表的信息判断,用户是否可以访问Session数据;
SessionPara:存储用户的Session变量;
SessionInfo:记录用户每次访问时的Ip和Port。
      以上工作,基本实现了根据用户SessionId管理用户的状态,存储,访问Session数据(限字符),定时处理用户Session生存周期;
      没有处理:如果用户端不支持Cookie时,使用查询字符串标记用户的方法。      
      对此有兴趣的朋友,请多提意见。如果更新了代码,请发给我一份。
     

posted on 2005-08-05 10:39  Pierce  阅读(1992)  评论(6编辑  收藏  举报

导航