替代 c # 中的会话变量,我们可以使用类及其对象来存储值而不是会话变量吗?

本文关键字:变量 会话 存储 对象 我们 替代 可以使 | 更新日期: 2023-09-27 18:35:50

我正在构建一个Web应用程序。 身份验证将由网站管理,这不是我关心的问题。 我需要存储的是某个地方的UserID

一旦他们打开应用程序,我将能够获得他们的UserID。 我以前使用会话变量来存储它。 我可以创建一个类说:

static string _UserID;
public static string UserDetails
{
    get
    {
        return _UserID;
    }
    set
    {
        _globalValue = ''value from webpage;
    }
}

并使用UserDetails._UserID而不是将其分配给会话变量?!该网站的会话服务器不是很可靠,所以我想我可以使用这种方式。这行得通吗?

从答案中了解到,每个用户的变量将被覆盖,这不是我想要的!!

如果我create an instance of this class处理程序并将UserID分配给它,情况会是一样的吗?

有没有其他方法可以使其范围仅限于一个用户,即我登录时使用的 UserID 应该相同,如果新用户登录到应用程序,则不得覆盖它? 使用这种方法有什么缺点?如果我只使用一个页面并在应用程序的启动中分配对象,这种方法好吗?

替代 c # 中的会话变量,我们可以使用类及其对象来存储值而不是会话变量吗?

静态变量在应用程序域的生命周期内保持不变。因此,导致静态变量"重置"的两件事是应用程序域重新启动或使用新类。

主要问题是静态变量在所有用户之间共享,在您假装在其中存储 UserID 的情况下,这是危险的。如果要存储每个用户 sessoin ID 您应该使用Session

您可以在此处找到更多信息:

ASP.NET 静态变量的生存期

static将在所有用户之间共享,这意味着您将为每个人覆盖它。如果您不想将其存储在Session则可以将其存储在cookie中(如果安全性很重要,则加密)。