当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 如何实现Asp与Asp.Net共享Session

ASP.NET
Asp.net 时间操作基类(支持短日期,长日期,时间差)
asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
asp.net 数据库备份还原(sqlserver+access)
Asp.Net 数据操作类(附通用数据基类)
Asp.net 弹出对话框基类(输出alet警告框)
Asp.net 文件上传类(取得文件后缀名,保存文件,加入文字水印)
Asp.net Socket客户端(远程发送和接收数据)
Asp.net 字符串操作基类(安全,替换,分解等)
Asp.Net数据输出到EXCEL表格中
asp.net Gridview里添加汇总行
asp.net UpdatePanel的简单用法
asp.net ajaxControlToolkit FilteredTextBoxExtender的简单用法
this connector is disabled错误的解决方法
sql事务应用积累
asp.net Page.Controls对象(找到所有服务器控件)
在asp.NET中字符串替换的五种方法
ASP.NET缓存方法分析和实践示例代码
asp.net 在DNN模块开发中遇到的resx怪问题
ASP.NET State service状态服务的问题解决方法
asp.net 结合mysql存储过程进行分页代码

ASP.NET 中的 如何实现Asp与Asp.Net共享Session


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 221 ::
收藏到网摘: n/a

在.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" />

并将其值修改为合适的数据库链接。

将另外两个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中,我们要如下使用:

页面开始端

Dim Session
Set Session = Server.createObject("SessionMgr.Session2")
Session("UserID") = ...
...
...
...

页面结束端

Set Session = Nothing '记得一定要释放哦

而在Asp.net中,我们要如下使用:
 
首先,我们要添加对SessionUtility的引用

然后,编码时,原来是这样的继承 public class WebForm1 : System.Web.UI.Page,修改为public class WebForm1 : MSDN.SessionPage

这样在编码过程中就可以使用Session("UserID")这样的形式了。

注意:虽然Session实现了共享,但是Session的使用语法,相对于.net中新增的部分,就没有实现,毕竟要照顾asp
譬如Session.Remove,就不能用了。