当前位置: 移动技术网 > IT编程>开发语言>.net > 实现Asp与Asp.Net共享Session的方法

实现Asp与Asp.Net共享Session的方法

2017年12月12日  | 移动技术网IT编程  | 我要评论

顾瀚畇,中国奇石展,伊藤麻奈

<iframe align="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、创建数据表
打开sql server查询分析器,运行以下脚本来创建数据表,数据表名为sessionstate

if exists (select * from sysobjects where id = object_id(n'[dbo].[sessionstate]') and objectproperty(id, n'isusertable') = 1) 
drop table [dbo].[sessionstate] 
go 

create table [dbo].[sessionstate] ( 
[id] uniqueidentifier not null , 
[data] [image] not null , 
[last_accessed] [datetime] not null 
) on [primary] textimage_on [primary] 
go 

alter table [dbo].[sessionstate] with nocheck add 
constraint [pk_sessionstate] primary key nonclustered 
( 
[id] 
) on [primary] 
go

2、下载以下文件 session.rar

将文件解压后,将产生4个文件,分别作如下操作。
复制 global.asa 到系统根目录下,并打开文件,修改application("sessiondsn") 为合适的数据库链接字符串,如果系统本身已经有了global.asa,则在此文件中添加如下application:
application("sessiondsn") = "initial catalog=sqlservername;persist security info=false;user id=sa;password=****;packet size=4096"
在系统的 web.config 文件中,添加此项
<add key="sessiondsn" value="data source=sqlservername;initial catalog=sessiondemodb;persist security info=false;user id=sessiondemodbuser;password=****;packet size=4096"></add>
并将其值修改为合适的数据库链接。
将另外两个dll文件复制到系统目录下(或其他合适目录)

3、关闭iis中asp的session选项
打开iis,选择站点,依次选择属性 -> 主目录 -> 配置 -> 应用程序选项,将启用会话状况前的复选勾去除。如下图:
screen.width-350)this.width=screen.width-350" border=0>

4、安装sessionutility.dll
首先找到 gacutil.exe 文件,一般情况下在 microsoft visual studio .net 2003\sdk\v1.1\bin 目录下
在命令提示符窗口中,执行 gacutil /i sessionutility.dll,(如果执行失败,请将这两个文件的路径都写全了)

5、注册sessionutility.dll为com对象
同样,要找到 regasm.exe 文件,一般情况下在 winnt\microsoft.net\framework\v1.1.4322 目录下
在命令提示符窗口中,执行 regasm.exe sessionutility.dll /tlb:sessionutility.tlb,(如果执行失败,请将这两个文件的路径都写全了)
这样就会产生出一个tlb文件,可当做普通的com组件来调用。

6、注册sessionmanager.dll
这个很简单了,在命令提示符窗口中,执行regsvr32 sessionmanager.dll

7、如果是ntfs格式的系统,请找到 sessionmgr.dll,右键点击,属性,将iusr_<machine_name>权限设置为可读和可执行。 至此,我们已经可以实现了asp与asp.net之间session共享了,那么怎么去用 在asp中,我们要如下使用: <br>页面开始端 <br>dim session <br>set session = server.createobject("sessionmgr.session2") <br>session("userid") = ... <br>... <br>... <br>... <br>页面结束端 <br>set session = nothing '记得一定要释放哦 而在asp.net中,我们要如下使用: <br>首先,我们要添加对sessionutility的引用 <br>然后,编码时,原来是这样的继承 public class webform1 : system.web.ui.page,修改为public class webform1 : msdn.sessionpage <br>这样在编码过程中就可以使用session("userid")这样的形式了。 注意:虽然session实现了共享,但是session的使用语法,相对于.net中新增的部分,就没有实现,毕竟要照顾asp <br>譬如session.remove,就不能用了。<p id="tbpingurl">trackback: http://tb.blog.csdn.net/trackback.aspx?postid=1621435</p> <br></machine_name>

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网