在ASP与ASP.NET之间共享对话状态(2)

时间:2008-09-02 12:21:00 

在ASP与ASP.NET之间共享对话状态(1)

ASP实现

原来的ASP对话只能将对话数据保存在内存中。为了将对话数据保存到SQL Server,需要写一个自定义的Visual Basic 6.0 COM对象代替现在的对话对象来管理对话状态。该COM对象在每个Web请求开始时被初始化,并从SQL Server重新载入对话数据。ASP脚本完成时,该对象将终止并把对话状态将返回到SQL Server。

Visual Basic 6 COM Session对象的主要目的是提供对微软Internet信息服务器(IIS)内部对象的访问。Visual Basic 6 COM对话对象使用SessionUtility组件的mySession类来保存对话状态,SessionUtility的SessionPersistence类用于载入和保存对话数据到SQL Server。使用regasm.exe工具将mySession和 SessionPersistence类作为COM对象暴露。regasm.exe工具可以注册并为COM客户端建立一个类型库来使用框架组件类。
  在对象的构造函数中状态信息被重新载入。构造函数(class_initialize)首先从Application对象中检索对话cookie、对话超时设置(SessionTimeOut)、数据库连接字符串(SessionDSN),并建立mySession类的一个实例来保持对话数据。接着构造函数将试图重新使用给定的cookie从SQL Server中载入对话数据。如果SQL Server中没有对话信息,或者对话已经终止,将产生一个新的cookie。如果SQL Server返回了对话状态数据,对话状态信息将保存在mySession对象中。

Private Sub Class_Initialize() 
 On Error GoTo ErrHandler: 
 Const METHOD_NAME As String = "Class_Initialize" 
 Set mySessionPersistence = New SessionPersistence 
 Set myObjectContext = GetObjectContext() 
 mySessionID = ReadSessionID() 
 myDSNString = GetConnectionDSN() 
 myTimeOut = GetSessionTimeOut() 
 myIsNewSession = False 
 Call InitContents 
 Exit Sub 
ErrHandler: 
 Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description 
End Sub 
Private Sub InitContents() 
 On Error GoTo ErrHandler: 
 Const METHOD_NAME As String = "InitContents" 
 If mySessionID = "" Then 
  Set myContentsEntity = New mySession 
  mySessionID = mySessionPersistence.GenerateKey 
  myIsNewSession = True 
 Else 
  Set myContentsEntity =mySessionPersistence.LoadSession(mySessionID, myDSNString,   myTimeOut) 
End If 
 Exit Sub 
ErrHandler: 
 Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description 
End Sub 

如果对象实例超出了脚本的范围,将执行解构函数(class_terminate)。解构函数将使用SessionPersistence.SaveSession()方法保持对话数据。如果是一个新对话,解构函数将新cookie发送回浏览器。

Private Sub Class_Terminate() 
 On Error GoTo ErrHandler: 
 Const METHOD_NAME As String = "Class_Terminate" 
 Call SetDataForSessionID 
 Exit Sub 
ErrHandler: 
 Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description 
End Sub 
Private Sub SetDataForSessionID() 
 On Error GoTo ErrHandler: 
 Const METHOD_NAME As String = "SetDataForSessionID" 
     Call mySessionPersistence.SaveSession(mySessionID, 
     myDSNString, myContentsEntity, myIsNewSession) 
 If myIsNewSession Then Call WriteSessionID(mySessionID) 
 Set myContentsEntity = Nothing 
 Set myObjectContext = Nothing 
 Set mySessionPersistence = Nothing 
 Exit Sub 
ErrHandler: 
 Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description 
End Sub 

标签:ASP.NET,SQL,Server,函数
0
投稿

猜你喜欢

  • 对acronym、abbr标签的理解

    2008-05-29 13:03:00
  • 相同记录行如何取最大值

    2008-07-26 12:32:00
  • 浅析网页Transitional和Strict的文档声明的区别

    2009-02-17 12:45:00
  • asp清空站点缓存

    2009-08-04 18:01:00
  • javascript权威指南,学习笔记,之运算符号

    2008-04-20 16:43:00
  • 黑客谈 MSSQL SA权限入侵的感悟

    2008-03-20 10:18:00
  • 用FSO操作 xml

    2008-09-03 12:26:00
  • Mysql的最大连接数怎样用java程序测试

    2009-01-14 12:05:00
  • ORACLE常见错误代码的分析与解决(二)

    2010-08-02 13:31:00
  • 解析:以mysql_开始的未定义引用错误

    2008-12-19 17:58:00
  • MySQL数据库的其它安全问题

    2008-12-23 15:40:00
  • asp查询xml的代码 不刷新页面查询的方法

    2011-04-06 11:00:00
  • ASP 操作cookies的方法

    2011-03-10 11:24:00
  • 淘宝网获亚洲最佳在线客户体验大奖

    2009-03-31 12:55:00
  • 将有安全问题的SQL过程删除,比较全面

    2007-08-06 14:46:00
  • 开心网让人很不开心

    2009-04-05 15:56:00
  • SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍

    2012-05-22 18:38:49
  • asp如何用HtmlEncode来显示Unicode编码?

    2010-06-12 12:49:00
  • Flash在web客户端的潜在问题

    2009-05-20 12:11:00
  • 查询字符串中包含特殊字符的问题

    2009-01-09 13:13:00
  • asp之家 网络编程 m.aspxhome.com