广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-03 22:13:59 次阅读 稿源:互联网
    广告
    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


      例程

      例程设计为增加并显示一个数字。不管载入了哪个页面,由于数字值保存在SQL Server中并在ASP和ASP.NET间共享,数字将不断增加。

      建立例程的步骤

      1. 建立一个新数据库SessionDemoDb。

      2. 建立新表SessState(osql.exe -E -d SessionDemoDb -i Session.sql)。

      3. 建立新虚拟目录Demo。

      4. 在ASP配置页中关闭ASP对话。

      5. 将web.config、testPage.aspx、Global.asa、testPage.asp和GlobalInclude.asp复制到虚拟目录。

      6. 更新Global.asa和web.config中的DSN字符串设置。对话超时设置是可选的,默认为20分钟。

      7. 将SessionUtility.dll安装到全局组件缓存(gacutil /i SessionUtility.dll)。

      8. 使用regasm.exe把SessionUtility.dll作为COM对象暴露(regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb)。

      9. 将SessionManager.dll复制到本地目录并使用r

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告