asp经典和asp.net会话共享的更好方法是什么?
本文关键字:asp 更好 方法 是什么 共享 经典 net 会话 | 更新日期: 2023-09-27 18:08:36
我有一个asp经典和asp.net应用程序。我想分享一下从asp经典到asp.net的来回转换。我通过迭代会话名称并将其放入隐藏对象中来实现共享会话的解决方案。这工作很好,但我不知道这是否是一个更好的方法来分享会话。我读了一些文章,其中一些使用XML并通过表单发布传递,一些使用cookie,还有一些使用数据库。从这种方法中,什么是最好的实现方法,或者是否有其他最好的解决方案?
遗憾的是,你对已经完成的工作的描述不是很清楚:
我提出了一个解决方案,通过迭代会话名称并将其放在隐藏对象中来共享会话。
我要往回走一步从这里开始。然而,在此之前,我应该说,我认为在这个层面上集成两个系统根本不是一个好主意;你试图让两个系统一起工作,通过更换它们运行的一些管道,以一种他们没有真正注意到的方式。这可能会使您以后出现错误,当某些内容发生更改而相关更改没有在其他系统中进行时。我还建议不要过多地使用会话,尽管许多ASP系统确实滥用了它。
基本上,经典的ASP和ASP。Net的会话工作方式类似,它们使用会话标识符(要么自动存储为cookie -通常是默认的,要么通过URL传递),并允许您根据此会话标识符存储键/值对对象。
如果您想在会话中共享对象,您可以在两个应用程序交互时直接在它们之间传递信息(这将是"表单发布"方法),或者将其存储在外部位置,例如数据库中。我对表单发布方法有一些问题,即:
- 它将应该严格在服务器上的数据传递给浏览器并再次返回,这具有安全和带宽影响(您可能至少想要加密数据);
- 它假设您在两个应用程序之间有明确的切换或边界。这可能是,也可能不是。
我真的没有看到这种方法有太多的好处,除了它可能是最简单的,只要你有有限的交互(比如,几个字段,只有一个或两个页面交互)。同样的道理也适用于将所有会话信息传递给浏览器并返回到服务器的任何其他方法(例如将所有内容存储在cookie中)。
其他方法将假设您有一个存储会话的地方,现在让我们假设一个数据库。对于数据库,我们有一个存放数据的地方,每个应用程序可以简单地对这个地方进行读写。如果你有大量不同的交互,和/或系统没有明确的相互切换,这显然是一个更简单的方法。
剩下的问题是如何对不同类型的数据进行编码以及如何存储数据。这本质上是一个编码问题,您需要相当清楚地了解在每一边使用的不同数据类型(您应该确保ASP。. Net代码使用的类型至少在逻辑上等同于ASP数据类型)。
为了实现这一点,我将创建一个数据库实现来支持我存储会话数据的方式。它可以是一个简单的键/值对表,以及数据类型信息,或者它可以比这更规范化,这是你的决定。在此之后,我将为每个应用程序创建一个新的Session实现,它使用这个数据库。剩下要做的就是用您创建的新Session替换所有对标准Session对象的引用,这样就可以正常工作了。这可能与您所做的类似,但我特别提到使用数据库作为数据存储。
性能问题和清理旧会话应该相对容易解决,尽管这个实现肯定会比内存中的实现慢。
我知道这不是你问题的确切答案,但我已经在工作并集成了我自己的一些。net和经典asp应用程序,只是想给你一些我的经验的评论:
如果没有很好地记录,可能会令人困惑。在我们重新部署时没有正确记录的一些系统上,我们错过了处理部分功能的。net应用程序
最可靠和最好的工作(以我的经验)是我们选择一个应用程序作为"核心",其他部分调用这个核心来完成工作。
例如,创建。net应用程序(桌面,web,手持),调用经典asp网页,有效地提供简单的XML web服务-看到经典asp应用程序往往是系统的遗留"核心"部分。(用经典的asp编写xml web服务很有趣——说真的,它们既快又容易编码——没有类型转换问题;-))我不知道你在这里具体做什么,但我发现这种方法使代码的结构更直观,实际上简化了许多奇怪的相关问题,超出会话,例如在一个应用程序上有一个访问DB用作它的一部分,只有经典的asp访问它删除并发问题。
可能没有任何用处,但它是基于与大约10个运营管理系统的工作经验,这些系统以各种方式集成了。net和经典asp。