ASP.NET - C#中会话变量的替代方法

时间:2018-03-31 13:50:29

标签: c# asp.net iis model-view-controller session-state

因此,我总是在需要时使用会话变量(例如,将用户表单数据从一个注册表步骤保存到另一个注册表步骤)。

我被告知Web应用程序应该始终是无状态的,并且会话变量的问题是访问Web应用程序的用户越多,将使用更多的Web服务器内存,这将是最终在可扩展性方面打破了应用程序。

我想知道的是,今天使用的替代方案是将用户与其数据联系起来。在我的情况下,我有一个具有4个单独步骤的注册表形式的应用程序,我想允许用户继续他们离开的注册表进程。

提前感谢所有回答的人。

2 个答案:

答案 0 :(得分:1)

在我们的应用程序中,我们将所有用户状态数据保存到数据库,以允许用户返回到他们中断的位置。如果您在会话中保存信息,当用户注销或关闭其浏览器窗口时,会话变量可能会丢失。

为了使这个易于使用,我们创建了一个UserStateManager类。它的工作原理如下

  1. 为了检索信息,我们创建了以下功能。第一次调用它,它从数据库中读取信息。然后它将信息保存在本地缓存中。这样,下次加载页面时,信息已经存在,可以跳过数据库调用。

    var i = UserStateManger.Get(“对象名称”);

  2. 为了保存信息,我们创建了以下函数/ Whenever this 函数被调用,它将当前状态信息写入 数据库和本地缓存。

    UserStateManager.Save(“对象名称”,“数据对象”);

  3. 您应该允许任何数据类型保存为“数据对象”。这可以是值类型或类对象。

答案 1 :(得分:1)

最后,提供"持久性"的任何定义。 (又名" session"),你将不得不使用一些存储机制。

  • 会话商店:不只是"内存" (相同的应用服务器)。您有other options for storage

  • 客户端:Web Storage

    • 显然,无论你在这里存储什么,客户都可以访问,所以请注意(没有任何敏感,不要盲目信任,验证!)。

您可以根据上述内容提出更多内容并使用完全不同的内容(例如某些外部存储服务),但您必须自己管理它(使用相同的概念 - 例如CRUD,过期,验证等)。

H个。