zoukankan      html  css  js  c++  java
  • 多站点实现Session共享

    网站改版,用户采用东南大学统一身份认证系统,要实现多个asp.net应用程序间的Session共享。
          查阅资料N多,多不可行,可能可行的(包括微软官方方法)都需要改动应用程序本身很多...麻烦!很不悦!
          最终,找到一个解决方案...不过估计微软会不悦。

          大致思路:
                采用SqlServer方式存储Session,分析数据库表结构、原理、流程,大致可以得到SqlServer存储Session的方法:
                表结构:

                      
                ASPStateTempApplications表存储应用程序Id及名称
                ASPStateTempSessions表存储具体的Session值

                不同的应用程序会在ASPStateTempApplications中注册不同的数据,从而在ASPStateTempSessions中有不同的Session,如果要实现Session共享,可以用欺骗SqlServer的方法:用某种方法使得不同的应用程序访问数据库时用相同的App!为了达到这个目的,分析[dbo].[TempGetAppID]这个存储过程,代码如下:
    Code
                可以看到传入参数是AppName,通过AppName获取AppId,如果不存在则在ASPStateTempApplications表中插入该条记录,这里AppName参数在传入时是不同的应用程序不同的,当然我们可以在这里小改一下...注意第5行 SET @appName = LOWER(@appName) 我们可以毫不客气的改成 SET @appName = 'Everything you want ^_^
                好了(不知道这样做微软会不会很不悦...),大功告成,清理残留的Session,最好重启一下IIS,不用修改旧程序本身丝毫(配置web.config除外),实现了Session共享...以后凡是使用该数据库作为Session存储的都可以共享Session了...

          其他的一些配置说明如下:

                配置web.config节: 
     <sessionState mode="SQLServer" sqlConnectionString="data source=[Server];initial catalog=[DataBase];user id=[UserName];password=[Password]" allowCustomSqlDatabase="true"  timeout="120"/>

                配置SQLServer:
    aspnet_regsql.exe -sstype c -ssadd -d [DataBase] -U [UserName] -P [Password] -S [Server]
     
               修改[dbo].[TempGetAppID]:将@appName设为一个定值,修改保存。
                
                清理Session,重启IIS,KO!

                PS:这个方法其实很Bug 嘿嘿 再多研究下数据库的存储过程或者用某种方法定制appName的话,可能可以实现更多的功能...留待以后研究研究...
  • 相关阅读:
    备忘:java在cmd中编译运行
    Java基础学习 —— 对象的克隆
    将博客搬至CSDN
    jenkins节点管理中没有默认没有Launch agent via Java Web Start
    postman 集成ci
    postman初级使用
    jmeter分布式压测实践及踩坑记录(linux压力机)
    jmeter监控服务器cpu、内存等
    jmeter跨线程组传递token实践
    初识jmeter
  • 原文地址:https://www.cnblogs.com/dfsxh/p/1579579.html
Copyright © 2011-2022 走看看