【发布时间】:2010-12-17 18:47:54
【问题描述】:
有没有办法在 ASP3 和 ASP.NET 之间共享会话?
谢谢
【问题讨论】:
-
在我们的一个应用程序中,我们使用 url 中的查询字符串将 asp.net 会话数据传递给经典的 asp 会话数据。它不漂亮,但为我们节省了重写时间。
标签: asp.net session asp-classic
有没有办法在 ASP3 和 ASP.NET 之间共享会话?
谢谢
【问题讨论】:
标签: asp.net session asp-classic
尽管 Microsoft 尽最大努力使 ASP 和 ASP.NET 轻松共存,但仍有一个领域是绊脚石……会话状态。幸运的是,ASP.NET 升级后的会话状态管理的优势远远超过了无法将“经典”会话信息传递给 .NET 的不便。不幸的是,没有简单的解决方案。我能提供的最多的是一个易于实施的解决方法。
在尝试找到合适的解决方案时,我遇到了两个值得一提的好选择。第一个涉及将会话信息解析到“经典”中间页面上的隐藏表单字段,然后将该页面提交给将表单字段加载到会话状态的 .NET 中间页面。这是一个很好、简单的解决方案,但是它不能双向工作。在 .NET 中,您无法指定提交到的页面。每个页面都必须回发给自己。
第二个选项可能更接近实际解决方案而不是解决方法。 Microsoft 的 Billy Yuen 开发了一个有效的解决方案。代码很优雅,集成似乎是无缝的,但我无法让它在我的系统上运行(记住我说没有简单的解决方案,而不是根本没有解决方案)。如果此解决方案对您有用,那就太好了!您将不需要我的代码,并且会很高兴地将会话信息从“经典”传递到 .NET,就像它已经过时一样,感谢您的光临。
好的,如果您仍在阅读,让我简要介绍一下我创建的解决方法。它需要一个数据库,但哪种类型的数据库并不重要(尽管代码是为 SQL Server 编写的)。当一个页面(源页面)想要重定向到另一个使用不同版本 ASP 的页面(目标页面)时,它会调用一个中间页面。源中间页面获取每个会话变量并将其与全局唯一 ID (GUID) 一起添加到数据库中。由于“经典”和 .NET 使用不同的 SessionID 格式,因此无法使用 SessionID,因此需要使用 GUID。然后,源中间页面通过 Querystring 变量将 GUID 传递给目标中间页面。目标中间页面从数据库中检索会话信息,自行清理,然后重定向到目标页面。它类似于第一个解决方法,但支持双向传输状态。 代码用法 安装
用法
要在超链接(锚标记)或 Response.Redirect 中使用,请将目标 URL 设置为以下之一:
来自 ASP“经典”页面:
SessionTransfer.asp?dir=2aspx&url=<asp_dotnet_url>
从 ASP.NET 页面:
SessionTransfer.aspx?dir=2asp&url=<asp_classic_url>
代码将传输 Session 信息并将用户重定向到 or 指定的 url。 下载
您可以从here 下载代码:session_transfer.zip (4.6 KB)。
【讨论】:
可以看看NSession 它允许使用状态服务器在经典 ASP 和 ASP.Net 之间共享会话状态。设置非常简单,只需将 App 配置为使用 State Server 进行会话并注册几个 dll 文件。
【讨论】: