13

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

但是,需要添加一些似乎最适合 ASP.NET 的新功能。做出决定是为了让系统成为 ASP 和 ASP.NET 的奇怪混合体。

我们最大的症结是会话管理,我们一起破解了一个通过表单变量传递会话值的解决方案。我已经与通过 cookie 处理同样问题的其他人交谈过。

这两种方法似乎都是一个可怕的问题(除了非常不安全之外)。

有没有更好或更清洁的方法,或者这只是一个糟糕的主意,开始讨论这个话题是没有意义的?

4

6 回答 6

9

您不能将会话数据保存到服务器端数据存储吗?即 XML 文件、数据库等。然后您可以将哈希(根据一些安全识别会话的标准计算得出)传递给 .NET 页面,该页面可以使用此标识符从数据存储中提取数据并填充您的会话数据. 这仍然意味着每次都必须通过代理将请求从 ASP 传递到 ASP.NET,以确保每个应用程序中都有最新的会话数据,但恐怕我不知道实现此目的的替代方法。

于 2008-09-25T13:07:10.683 回答
5

我不得不处理同样的问题。在我的例子中,我将一个密钥加密到一个 cookie 中,并将数据库用于任何其他信息。我在 .NET 中编写了加密并进行了互操作以解密 ASP 端的 id。处理 base-64 字符串有些奇怪,因为 ASP 不会获得与 .NET 相同的字符串,因此您可能必须像我一样将 base-64 字符串重写为等效的十六进制或一些类似的最低公分母战术。它相对安全(保存 XSS 攻击)。

于 2008-09-25T13:03:54.437 回答
1

好吧,最终最好的主意可能是将 ASP 应用程序转换为 .NET。我认为这可能是不言而喻的。如果安全是一个大问题,您可以采取一些步骤来加密和维护会话信息的完整性,以使其更加安全,例如一些对称加密和散列等等。

于 2008-09-25T13:04:49.707 回答
1

在一般情况下,我不知道有任何更清洁的方法可以做到这一点。但也许您可以更具体地描述您必须在系统之间共享什么状态?在您的特定情况下可能有更清洁的解决方案。会话对象状态并不总是保持状态的最佳方式。

于 2008-09-25T13:07:00.090 回答
1

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

于 2008-09-25T13:09:16.293 回答
0

您可以创建一个新的 .NET Web 窗体应用程序,在其中包含您的 .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> 
于 2021-11-10T21:57:23.600 回答