实现Asp与Asp.Net共享Session的方法
<iframealign="top"marginwidth="0"marginheight="0"src="http://www.zealware.com/46860.html"frameborder="0"width="468"scrolling="no"height="60"></iframe>
在.net中,Session的存储机制已经与Asp的存储机制不一样,虽然可以在同一个IIS下同时运行asp与aspx,但是它们之间不能传递Session。
之前大批系统应用到了asp,在升级过程中,如果完全抛弃asp来重写,一来工作量太大,二来以前的成果不能保存下来。
所以微软提出了一个Session共享的解决方案,只是此文档光说明原理,并没有说具体的操作步骤,由此,我撰文描述过程。
简单说明原理,asp与asp.net之间的Session统一存储在数据库中来实现共享
1、创建数据表
打开SQLServer查询分析器,运行以下脚本来创建数据表,数据表名为SessionState
ifexists(select*fromsysobjectswhereid=object_id(N'[dbo].[SessionState]')andOBJECTPROPERTY(id,N'IsUserTable')=1) droptable[dbo].[SessionState] GO createTABLE[dbo].[SessionState]( [ID]uniqueidentifierNOTNULL, [Data][image]NOTNULL, [Last_Accessed][datetime]NOTNULL )ON[PRIMARY]TEXTIMAGE_ON[PRIMARY] GO alterTABLE[dbo].[SessionState]WITHNOCHECKADD CONSTRAINT[PK_SessionState]PRIMARYKEYNONCLUSTERED ( [ID] )ON[PRIMARY] GO
2、下载以下文件Session.rar
将文件解压后,将产生4个文件,分别作如下操作。
复制global.asa到系统根目录下,并打开文件,修改Application("SessionDSN")为合适的数据库链接字符串,如果系统本身已经有了global.asa,则在此文件中添加如下Application:
Application("SessionDSN")="initialcatalog=SqlServerName;persistsecurityinfo=False;userid=sa;password=****;packetsize=4096"
在系统的Web.config文件中,添加此项
<addkey="SessionDSN"value="datasource=SqlServerName;initialcatalog=SessionDemoDb;persistsecurityinfo=False;userid=SessionDemoDbUser;password=****;packetsize=4096"></add>
并将其值修改为合适的数据库链接。
将另外两个dll文件复制到系统目录下(或其他合适目录)
3、关闭IIS中Asp的Session选项
打开IIS,选择站点,依次选择属性->主目录->配置->应用程序选项,将启用会话状况前的复选勾去除。如下图:
screen.width-350)this.width=screen.width-350"border=0>
4、安装SessionUtility.dll
首先找到gacutil.exe文件,一般情况下在MicrosoftVisualStudio.NET2003\SDK\v1.1\Bin目录下
在命令提示符窗口中,执行gacutil/iSessionUtility.dll,(如果执行失败,请将这两个文件的路径都写全了)
5、注册SessionUtility.dll为Com对象
同样,要找到regasm.exe文件,一般情况下在WINNT\Microsoft.NET\Framework\v1.1.4322目录下
在命令提示符窗口中,执行regasm.exeSessionUtility.dll/tlb:SessionUtility.tlb,(如果执行失败,请将这两个文件的路径都写全了)
这样就会产生出一个tlb文件,可当做普通的Com组件来调用。
6、注册SessionManager.dll
这个很简单了,在命令提示符窗口中,执行regsvr32SessionManager.dll
7、如果是NTFS格式的系统,请找到SessionMgr.dll,右键点击,属性,将IUSR_<machine_name>权限设置为可读和可执行。至此,我们已经可以实现了Asp与Asp.net之间Session共享了,那么怎么去用在Asp中,我们要如下使用:<br>页面开始端<br>DimSession<br>SetSession=Server.createObject("SessionMgr.Session2")<br>Session("UserID")=...<br>...<br>...<br>...<br>页面结束端<br>SetSession=Nothing'记得一定要释放哦而在Asp.net中,我们要如下使用:<br>首先,我们要添加对SessionUtility的引用<br>然后,编码时,原来是这样的继承publicclassWebForm1:System.Web.UI.Page,修改为publicclassWebForm1:MSDN.SessionPage<br>这样在编码过程中就可以使用Session("UserID")这样的形式了。注意:虽然Session实现了共享,但是Session的使用语法,相对于.net中新增的部分,就没有实现,毕竟要照顾asp<br>譬如Session.Remove,就不能用了。<pid="TBPingURL">Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1621435</p><br></machine_name>