ASP.NET指定单个或多个Session值与其他站点共享,其他互不影响
这个想法是最近项目里面出来的问题,所有想到的,一个单点登录,也就是共享登录信息了,以前在网上找的都是把Session全部和其它站点共享了,这样就会有很多混乱的苦恼,怎么老实现只共享某个Session了 如:我值共享Session["LoginInfo"]的值,也好是在别的站点我只能获取到我这个站点的Session["LoginInfo"]的值,获取其它值就不行了?首先看看都Session全部共享的实现方法,全部共享Session得实现以下效果:
1、保证所有站点的SessionId值完全一样,不管是先进入的哪个站点
2、修改站点的区别字符串
实现以上功能有很多种方法,最合理的当然是自定义SessionId的管理类也就是继承System.Web.SessionState.ISessionIDManager接口的一个类,这样我们自己管理Sessionid就能够很轻松的使所有站点SessionId值完全一致,
实现指定Session共享的话就麻烦一点了,我们得先看看Session的保存机制,Session保存方式一个有三种,哪三种我想大家都非常清楚了,反编译查看源码得知这三种都保存机制都继承了一个抽象类System.Web.SessionState.SessionStateStoreProviderBase。
但因为微软把这三种保存机制都定义成了程序集的,我们无法使用,这时候就想到了兼容,就如xxx模式中的兼容转换一样,我在定义一个MySessionStateStoreProvider继承System.Web.SessionState.SessionStateStoreProviderBase,然后在实现System.Web.SessionState.SessionStateStoreProviderBase都所有派生成员都能转换成MySessionStateStoreProvider的方法,实现这个最简单的方法就是在MySessionStateStoreProvider定义一个私有的变量System.Web.SessionState.SessionStateStoreProviderBase ,这样去实现,到了这一步就可以看看System.Web.SessionState.SessionStateStoreProviderBase里面定义的抽象方法了,
o(︶︿︶)o 星期六上班的你伤不起啊,还是晚上回去接着写完吧。。。。