经典ASP和ASP.NET集成

14

在以前的工作中,我们有一个经典的ASP应用程序,没有人想要迁移到ASP.NET。它所做的事情非常好。

然而,需要添加一些新功能,这些功能似乎最适合于ASP.NET。决定允许系统成为ASP和ASP.NET的奇怪混合体。

我们最大的难点是会话管理,我们通过表单变量拼凑出了一个解决方案来传递会话值。我已经与其他人交谈过,他们通过cookie处理了相同的问题。

这两种方法似乎都很糟糕(除了非常不安全外)。

有更好或更清晰的方法吗?还是这个想法本身就太糟糕,以至于对此进行讨论是毫无意义的?

6个回答

9

您是否可以将会话数据保存到服务器端的数据存储中,例如XML文件、数据库等?然后您可以只传递一个哈希值(根据一些安全标识会话的准则计算)给.NET页面,该页面可以使用此标识符从数据存储中获取数据并填充您的会话数据。这仍意味着每次都需要通过代理将请求从ASP传递到ASP.NET,以确保每个应用程序中都有最新的会话数据可用,但我不知道有其他方法可以实现这一点。


5
我曾经也遇到了同样的问题。在我的情况下,我将一个密钥加密到了一个cookie中,并使用数据库存储其他信息。我使用.NET编写了加密算法,并通过Interop在ASP端进行解密。与base-64字符串打交道时有一些奇怪的问题,因为ASP得到的字符串与.NET不同,所以你可能需要像我一样将base-64字符串重写为十六进制等价物或者采用类似的最低公共分母策略。这种方法相对安全(除了XSS攻击)。

Base64算法非常稳定,ASP无法本地处理Base 64。因此,您以前使用的任何算法都只是有缺陷的。 - AnthonyWJones
在ASP中的Request.Cookies进行了一些编码,而在ASP.NET中没有这样做。 - oglester

1
您可以创建一个新的.NET Web Forms应用程序,并在其中包含您的.asp经典代码,然后将以下内容添加到您的web.config文件中。确保以集成管道模式运行应用程序池。
这将确保身份验证模块(如表单身份验证)向后兼容ASP Classic。您的ASP Classic代码将受到与您的.NET代码相同的身份验证机制的保护(如web.config中定义),而无需实现自制机制,如您所述。
  <system.webServer>
    <modules>
      <remove name="FormsAuthenticationModule" />
      <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
      <remove name="UrlAuthorization" />
      <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
      <remove name="DefaultAuthentication" />
      <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
      <remove name="Session" />
      <add name="Session" type="Microsoft.AspNet.SessionState.SessionStateModuleAsync, Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode" />
    </modules>
  </system.webServer> 

1
值得注意的是,您只能将ASP Classic与WebForms合并,因此.NET Core不适用于您的构建。 - eliteproxy

1

嗯,最终最好的想法可能是将ASP应用程序转换为.NET。不过我想这可能是不言自明的。如果安全性很重要,您可以采取一些步骤来加密并维护会话信息的完整性,以使其更安全,例如一些对称加密和散列等。


1

在一般情况下,我不知道有什么更简洁的方法来解决这个问题。但也许您可以更具体地描述一下系统之间需要共享的状态是什么?在您的特定情况下可能会有更简洁的解决方案。 会话对象状态并不总是保持状态的最佳方式。


1

我必须同意Wes P的观点... 长期目标是什么?如果长期目标是将经典ASP应用程序迁移到ASP.NET,那么我认为无论短期修复措施是什么,都会奏效。如果长期目标是保留经典ASP应用程序,则最好选择更强大的会话管理解决方案,类似于Oglester所推荐的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接