网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

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

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/13

  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 &

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号