ASP3和ASP.NET会话共享

时间:2009-11-18 08:11:01

标签: asp.net session asp-classic

有没有办法在ASP3和ASP.NET之间共享会话?

由于

2 个答案:

答案 0 :(得分:2)

尽管微软尽最大努力使ASP和ASP.NET毫不费力地共存,但一个领域仍然是一个绊脚石......会议状态。幸运的是,ASP.NET升级的会话状态管理的优点远远超过了无法将“经典”会话信息传递给.NET的不便。不幸的是没有简单的解决方案;我能提供的最多是一个易于实施的解决方法。

在尝试找到合适的分辨率时,我遇到了两个值得一提的好选择。第一种方法是将会话信息解析为“经典”中间页面上的隐藏表单字段,然后将页面提交到.NET中间页面,该页面将表单字段加载到会话状态。这是一个很好的,简单的解决方案,但它并不是双向的。在.NET中,您无法指定您提交的页面。每个页面都有自己的PostBack。

第二个选项可能更接近实际解决方案而不是解决方法。微软的Billy Yuen开发了一种有效的解决方案。代码很优雅,集成看起来是无缝的,但我无法让它在我的系统上工作(记住我说没有简单的解决方案,而不是根本没有解决方案)。如果这个解决方案适合你,太棒了!您将不需要我的代码,并且您将愉快地将会话信息从“经典”传递到.NET,就像它已经不再流行一样,感谢您停下来。

好的,如果您还在阅读,请让我简要介绍一下我创建的解决方法。它需要一个数据库,但是哪种类型的数据库(尽管代码是为SQL Server编写的)并不重要。当页面(源页面)想要重定向到使用不同版本的ASP的另一个页面(目标页面)时,它会调用一个中间页面。源中间页面获取每个会话变量,并将其与全局唯一ID(GUID)一起添加到数据库。由于“Classic”和.NET使用不同的SessionID格式,因此无法使用SessionID,因此使用GUID。然后,源中间页面通过Querystring变量将GUID传递给目标中间页面。目标中间页面从数据库中检索会话信息,自行清理,然后重定向到目标页面。它与第一种解决方法类似,但支持在两个方向上传输状态。 代码用法 安装

  1. 在数据库中的“ASPSessionState.sql”中运行SQL查询,该数据库将保存临时会话信息。
  2. 将.asp和.aspx。*(SessionTransfer.aspx和SessionTransfer.aspx.cs)文件复制到您网站上的文件夹中。
  3. 更新“SessionTransfer.asp”和“SessionTransfer.aspx.cs”文件中的连接对象信息。它位于每个文件的三个位置(抱歉没有合并连接信息)。
  4. 编译aspx文件。
  5. .asp和.aspx。*文件必须全部驻留在同一文件夹中才能工作。
  6. 用法

    要在超链接(锚标记)或Response.Redirect中使用,请将目标网址设置为以下之一:

    从ASP“经典”页面:

    SessionTransfer.asp?dir=2aspx&url=<asp_dotnet_url>
    

    从ASP.NET页面:

    SessionTransfer.aspx?dir=2asp&url=<asp_classic_url>
    

    代码将传输会话信息并将用户重定向到由或指定的URL。 下载

    您可以从here下载代码:session_transfer.zip(4.6 KB)。

答案 1 :(得分:0)

可以看看NSession它允许使用状态服务器在Classic ASP和ASP.Net之间共享会话状态。设置起来非常简单,只需将App配置为使用State Server进行会话并注册几个dll文件。