`

ASP.Net 多虚拟目录Web应用程序 实现Session共享

 
阅读更多

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

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


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

不同的应用程序会在ASPStateTempApplications中注册不同的数据,从而在ASPStateTempSessions中有不同的Session,如果要实现Session共享,可以用欺骗SqlServer的方法:用某种方法使得 不同的应用程序访问数据库时用相同的App! 为了达到这个目的,分析[dbo].[TempGetAppID]这个存储过程,代码如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1 ALTER PROCEDURE [ dbo ] . [ TempGetAppID ]
2 @appName tAppName,
3 @appId int OUTPUT
4 AS
5 SET @appName = LOWER ( @appName )
6 SET @appId = NULL
7
8 SELECT @appId = AppId
9 FROM [ Herald.Session ] .dbo.ASPStateTempApplications
10 WHERE AppName = @appName
11
12 IF @appId IS NULL BEGIN
13 BEGIN TRAN
14
15 SELECT @appId = AppId
16 FROM [ Herald.Session ] .dbo.ASPStateTempApplications WITH (TABLOCKX)
17 WHERE AppName = @appName
18
19 IF @appId IS NULL
20 BEGIN
21 EXEC GetHashCode @appName , @appId OUTPUT
22
23 INSERT [ Herald.Session ] .dbo.ASPStateTempApplications
24 VALUES
25 ( @appId , @appName )
26
27 IF @@ERROR = 2627
28 BEGIN
29 DECLARE @dupApp tAppName
30
31 SELECT @dupApp = RTRIM (AppName)
32 FROM [ Herald.Session ] .dbo.ASPStateTempApplications
33 WHERE AppId = @appId
34
35 RAISERROR ( ' SQLsessionstatefatalerror:hash-codecollisionbetweenapplications '' %s '' and '' %s '' .Pleaserenamethe1stapplicationtoresolvetheproblem. ' ,
36 18 , 1 , @appName , @dupApp )
37 END
38 END
39
40 COMMIT
41 END
42
43 RETURN 0

可 以看到传入参数是AppName,通过AppName获取AppId,如果不存在则在ASPStateTempApplications表中插入该条记 录,这里AppName参数在传入时是不同的应用程序不同的,当然我们可以在这里小改一下...注意第5行 SET @appName = LOWER ( @appName ) 我们可以毫不客气的改成 SET @appName = 'Everything you want ^_^ '
好 了(不知道这样做微软会不会很不悦...),大功告成,清理残留的Session,最好重启一下IIS,不用修改旧程序本身丝毫(配置 web.config除外),实现了Session共享...以后凡是使用该数据库作为Session存储的都可以共享Session了...

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

配置web.config节:

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> < sessionState mode ="SQLServer" sqlConnectionString ="datasource=[Server];initialcatalog=[DataBase];userid=[UserName];password=[Password]" allowCustomSqlDatabase ="true" timeout ="120" />


配置SQLServer:

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->aspnet_regsql.exe - sstypec - ssadd - d[DataBase] - U[UserName] - P[Password] - S[Server]


修改[dbo].[TempGetAppID]:将@appName设为一个定值,修改保存。

清理Session,重启IIS,KO!

PS:这个方法其实很Bug 嘿嘿 再多研究下数据库的存储过程或者用某种方法定制appName的话,可能可以实现更多的功能...留待以后研究研究...

分享到:
评论

相关推荐

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的...

    ASP.NET4高级程序设计(第4版) 3/3

     《ASP.NET 4高级程序设计(第4版)》是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。书中还深入讲述了其他ASP.NET图书...

    asp.net知识库

    ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) 体验.net2.0的优雅(3) -- 为您的 SiteMap 添加 控制转发功能 GridView控件使用经验 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! ASP.NET2.0控件...

    Asp.net中处理一个站点不同Web应用共享Session的问题

    3、解决方法:1) 将四个web应用包含在同一个解决方案中(注:调整.webinfo文件使解决方案能构正常运行)2) 新建一个web应用Main,该web应用包含在解决方案S中,并直接存放在S目录下(即与虚拟目录S相对应)。...

    net学习笔记及其他代码应用

    net的最近面试经典试题ASP.NET面试题集合 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中...

    ASP200问.EXE

    第2章 ASP.NET运行模型 12.如何定义变量和判定变量类型 13.什么是变量的作用域 14.如何强制要求显式声明变量 15.如何保留或消除过程调用对变量的影响 16.如何创建和调整动态数组 18.如何计算中英文混合字符串的...

    JAVA面试题最全集

    1.Web安全性的考虑(表单验证、浏览器Basic方式的验证,应用程序的安全性,SSL,代码考虑) 2.简单介绍您所了解的MVC。 3.简单介绍所了解的XML。 4.文档和编码规范 5.Java中的分页、效率考虑。 6.简单介绍您所...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    网管教程 从入门到精通软件篇.txt

    AIF,AIFF:音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式 ANI:Windows系统中的动画光标 ARC:LH ARC的压缩档案文件 ARJ:Robert Jung ARJ压缩包文件 ASD:Microsoft Word的自动保存文件;...

    vcg(验证码控件)

    在IIS管理器中将网站属性的ASP.NET version选中为2.0,并在网站虚拟目录属性的“安全”选项卡中添加ASP.NET用户,赋予写入权限; b) 在Microsoft Visual Studio 2005中打开相应的网站,并打开相应的aspx页面文件...

Global site tag (gtag.js) - Google Analytics