有没有办法在ASP3和ASP.NET之间共享会话?
由于
答案 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传递给目标中间页面。目标中间页面从数据库中检索会话信息,自行清理,然后重定向到目标页面。它与第一种解决方法类似,但支持在两个方向上传输状态。 代码用法 安装
用法
要在超链接(锚标记)或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文件。