English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 威盾新闻 >> 相同的IIS让多个网站共享Session信息

 

相同的IIS让多个网站共享Session信息

威盾防火墙 2014-12-11

 
前言
 
先谈谈为什么会有此需求吧,担任甲方的IT部门最大的挑战就是要维护旧的系统,要了解很多的business logic,而因为旧系统技术过旧架构也不太好,造成维护困难,故提出了重构的建议,但现实往往不可能那么美好,因为还是要面对新的需求,处理使用者的操作问题,又因人力不足没办法专注的在重构这件事,所以只能列出计划,有计划性的慢慢重构,而短期目标就是旧的系统不要在增肥,而新的需求遵循新的架构走。
 
本公司旧系统是WebForm 2.0的Website,我试着导入MVC,故最初的想法是将旧网站先升级到FrameWork 4.0,再将新的MVC Application加入进去,但升级上遇到了困难,因旧的WebSite有买第三方Grid套件,故他是绑死在.NET 2.0的,尝试升级后整个就悲剧了,故开始朝向两个Website去处理,而遇到的课题就是一些Session数据如何共享:
 
1.将使用者的信息存入Cookie - 可行,但有安全性的疑虑
 
2.利用SQL Server的Session机制实现
 
本篇将介绍第二点的实现方式
 
Step 1 建置并发布两个网站

而在这网站新增一个WebForm,程序也简单到不行,秀出当前的Session及新增Session功能
\
Step 2 建置存放Session专用的数据库
 
进入C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 将此路径复制
 
\
进入命令提示字符,键入以下指令
 
aspnet_regsql.exe -S 数据库主机IP -U sa -P 密码 -ssadd -sstype c -d 数据库名称
 
请依情况去改变上方参数
 
\
 
利用SSMS,就可看到数据库已经建置完成
\

Step 3 修改WebSite的Web.config
 
在Web.config system.web区块加入以下程序,程序区块都不用动
 
<sessionState mode="SQLServer" sqlConnectionString="data source=KYLE;initial catalog=SessionPool;user id=sa;password=kyle" allowCustomSqlDatabase="true"  timeout="120"/>
 
Step 4 修改SQL Session Table
 
进入DB,会看到有以下两个表: 
 
ASPStateTempApplications 用来储存应用程序的ID和名称
 
ASPStateTempSessions 用来储存Session的值
 
\

先两分别Run看看在两个网站写入一个Session数据会变什么情况

\
 
会发现会有两笔AppName,而ASPStateTempSessions 则会有Session纪录
 
接着最重要的,其实就是在SQL stored procedure做些手脚,让不同的Apps,指向同一个AppName
 
打开预存程序dbo.TempGetAppID


修改@appName
\

这样就大功告成了,我们重启IIS和SQL,把Session清掉再来各新增一笔看看:

 
\
 
 
后记
 
建议,要重构还是整个重新规划会比较好,毕竟Session移到SQL上,DB因为connection次数变多而负担加重,多少会有些效能问题,但不能忍受古人的技术债又因为一些因素影响的人,就可以参考这种方式 T__

相关内容: 最新内容:
基于JSP的动态网站开发技术[2014-12-11]
如何让IIS6支持FLV和RMVB格式[2014-12-11]
PHP防盗链技术[2014-12-11]
SQL注入漏洞入侵的过程及其防范措施[2014-12-10]
数据库系统防黑客入侵技术综述[2014-12-10]
总结揭露骇客入侵ASP+Access或ASP+MSSQL网站的手法+防御[2014-12-10]