在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
投稿

猜你喜欢

  • sql语句中单引号,双引号的处理方法

    2024-01-20 06:59:00
  • Python学习之yaml文件的读取详解

    2023-04-20 14:06:42
  • 使用python3+xlrd解析Excel的实例

    2021-05-09 23:37:33
  • php基于curl主动推送最新内容给百度收录的方法

    2023-11-22 04:46:44
  • 如何制作一个从Access数据库中读取记录的下拉菜单?

    2010-06-29 21:23:00
  • 详解Vue.use自定义自己的全局组件

    2024-05-02 17:02:59
  • python3.7 打包成exe程序方式(只需两行命令)

    2023-01-26 14:29:34
  • Python中列表的一些基本操作知识汇总

    2022-04-08 07:12:28
  • mysql 8.0 错误The server requested authentication method unknown to the client解决方法

    2024-01-13 01:41:25
  • javascript设计模式 – 简单工厂模式原理与应用实例分析

    2023-08-27 19:53:20
  • Django之Mode的外键自关联和引用未定义的Model方法

    2023-09-04 13:34:40
  • mysql 数据库安装经验问题汇总

    2024-01-28 11:55:29
  • explain命令为什么可能会修改MySQL数据

    2024-01-19 14:53:49
  • python实现12306火车票查询器

    2021-04-07 16:05:58
  • SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用

    2024-01-18 18:22:58
  • Oracle11.2.0.1如何升级到11.2.0.3 Oracle同版本升级

    2023-06-25 15:28:11
  • Pytorch使用MNIST数据集实现基础GAN和DCGAN详解

    2021-11-17 02:14:33
  • 教你pycharm运行Django第一个项目

    2021-08-25 16:40:07
  • python中常见进制之间的转换方式

    2021-08-15 13:27:48
  • python+OpenCV实现车牌号码识别

    2023-04-13 14:50:20
  • asp之家 网络编程 m.aspxhome.com