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

ASP.NET - Alternatives to Session Variables in C#

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

有人告诉我 Web 应用程序应该始终是无状态的,会话变量的问题是访问 Web 应用程序的用户越多,Web 服务器的内存就越多,这将最终在可扩展性方面破坏应用程序。

我想知道的是,目前正在使用哪些替代方案将用户与其数据联系起来。在我的例子中,我有一个应用程序,它有一个包含 4 个独立步骤的注册表单,我想让用户在他们离开的地方继续注册表过程。

提前感谢所有回答者。

在我们的应用程序中,我们将所有用户状态数据保存到数据库中,以允许用户return回到他们离开的地方。如果将信息保存在会话中,当用户注销或关闭浏览器时 window,会话变量可能会丢失。

为了使其易于使用,我们创建了一个 UserStateManager class。工作原理如下

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

    var i = UserStateManger.Get("object name");

  2. 为了保存信息,我们创建了下面的函数/每当这个 函数被调用时,它将当前状态信息写入 数据库和本地缓存内存。

    UserStateManager.Save("object name", "data object");

您应该允许将任何数据类型保存为 "data object"。这可以是值类型或 class 对象。

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

  • 会话存储:不仅仅是 "memory"(同一应用服务器)。您有 other options for storage.

  • 客户端:Web Storage

    • 很明显,客户端可以访问您存储在此处的任何内容,因此买者自负(不敏感,不要盲目相信,请验证!)。

你可以基于以上两者想出更多的东西并使用完全不同的东西(例如一些外部存储服务),但你必须自己管理它(使用相同的概念 - 例如 CRUD,过期、验证等)。

Hth.