在以前的工作中,我们有一个经典的ASP应用程序,没有人想要迁移到ASP.NET。它所做的事情非常好。
然而,需要添加一些新功能,这些功能似乎最适合于ASP.NET。决定允许系统成为ASP和ASP.NET的奇怪混合体。
我们最大的难点是会话管理,我们通过表单变量拼凑出了一个解决方案来传递会话值。我已经与其他人交谈过,他们通过cookie处理了相同的问题。
这两种方法似乎都很糟糕(除了非常不安全外)。
有更好或更清晰的方法吗?还是这个想法本身就太糟糕,以至于对此进行讨论是毫无意义的?
在以前的工作中,我们有一个经典的ASP应用程序,没有人想要迁移到ASP.NET。它所做的事情非常好。
然而,需要添加一些新功能,这些功能似乎最适合于ASP.NET。决定允许系统成为ASP和ASP.NET的奇怪混合体。
我们最大的难点是会话管理,我们通过表单变量拼凑出了一个解决方案来传递会话值。我已经与其他人交谈过,他们通过cookie处理了相同的问题。
这两种方法似乎都很糟糕(除了非常不安全外)。
有更好或更清晰的方法吗?还是这个想法本身就太糟糕,以至于对此进行讨论是毫无意义的?
您是否可以将会话数据保存到服务器端的数据存储中,例如XML文件、数据库等?然后您可以只传递一个哈希值(根据一些安全标识会话的准则计算)给.NET页面,该页面可以使用此标识符从数据存储中获取数据并填充您的会话数据。这仍意味着每次都需要通过代理将请求从ASP传递到ASP.NET,以确保每个应用程序中都有最新的会话数据可用,但我不知道有其他方法可以实现这一点。
<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>
嗯,最终最好的想法可能是将ASP应用程序转换为.NET。不过我想这可能是不言自明的。如果安全性很重要,您可以采取一些步骤来加密并维护会话信息的完整性,以使其更安全,例如一些对称加密和散列等。
在一般情况下,我不知道有什么更简洁的方法来解决这个问题。但也许您可以更具体地描述一下系统之间需要共享的状态是什么?在您的特定情况下可能会有更简洁的解决方案。 会话对象状态并不总是保持状态的最佳方式。