一个ASP.NET Web应用程序中的经典.ASP和.NET .aspx网页

时间:2009-07-02 18:38:15

标签: asp.net asp-classic

我们有一个用经典ASP编写的旧网络应用程序。我们没有足够的资源来重写应用程序。

我知道asp和aspx页面可以在同一个ASP.NET Web应用程序中共存,但它看起来像那些你不能在这两组页面扩展类型中共享Application和可能的Session变量。

我希望在ASP.NET中进行新的开发,理论上,我们可以将经典ASP页面转换为。

有没有办法在这两种类型的网页上共享IIS变量(除了使用查询字符串和表单字段传递信息)?

7 个答案:

答案 0 :(得分:9)

在经典ASP和ASP.NET之间没有共享会话变量的straigthforwad解决方案。我建议你将会话保存到数据库中,就像在Microsoft Article中描述的那样。这样ASP和ASP.NET都可以访问会话变量。

答案 1 :(得分:2)

不是直接的方式。您可以考虑使用共享数据库后端来处理会话状态。

答案 2 :(得分:1)

您可以在数据库中创建一个简单的表来存储“会话”信息。经典的asp和.net页面都可以在那里读写。

答案 3 :(得分:1)

传递此数据的唯一方法是GET / POST值,Cookie,平面文件或将数据存储到数据库。 .Net框架没有“内置”来执行此操作。

答案 4 :(得分:1)

除了将数据库用作共享会话持有者之外,我还看到了另一种解决方案。我应该事先说使用数据库选项可能比这更好。但...

您可以创建一个ASP页面,其唯一功能是存储到ASP会话状态并从中检索。在您的ASPX页面中,您可以对您的ASP页面进行webrequest,并在标题,查询字符串中返回任何会话信息,甚至可以对restulant负载进行清理。或者,您可以返回XML流并创建一个穷人的Web服务。

此外,您可以通过相反的方式从ASP.NET获取会话状态,并创建一个访问会话信息并返回它的.NET页面。

这不是一个好主意,充满了安全问题。我已经看到它完成了我所说的一切。最好依靠数据库并可能传递会话ID。

答案 5 :(得分:1)

我刚刚面对这个问题,并想告诉你,只是能够以一种方式解决它。解决方案相对简单,实际上取决于您的原始开发,在我的情况下,系统流程需要在default.aspx页面中登录,并且在验证用户/密码正确后,页面Init.asp被执行并且确切地存在许多在最后一条指令将用户重定向到mainmenu.aspx并形成我们称之为.aspx和.asp文件的页面之后,会创建并加载会话变量(实际上只是最小需要)。

这个解决方案对我来说只是因为原始开发人员在设计这个ASP 3.0应用程序时所做的选举,并且你可以想象我无法在asp.net页面中检索这些值。

答案 6 :(得分:0)

我刚刚经历过这个。我的解决方案是将它全部包装在nodejs应用程序中。我从.NET Web API发出JWT令牌,其中所有用户声明在有效负载中编码。此令牌存储在客户端上的cookie中。 cookie将自动在每个请求提交到您的域时提交,因此您需要做的就是从标头中读取cookie值并解码有效负载(在ASP.NET和Classic ASP中独立)。阅读完内容后,您可以简单地设置会话变量以匹配JWT令牌中嵌入的会话变量。

我更喜欢这种方法,因为它需要0个数据库同步,并将您的应用程序移动到OAuth2 openid并远离会话。