【问题标题】:Asp.Net static prop same domain confusingAsp.Net static prop 同域混淆
【发布时间】:2026-02-04 02:20:02
【问题描述】:

我在这里读了一个答案,他说:

静态对于应用程序域是唯一的,该应用程序域的所有用户将共享每个静态属性的相同值

但我现在很困惑,我为许多用户创建了一个项目,他们当然会共享同一个域。

理解示例代码:

public static class ApplicationSession
{
    private static readonly ICurrentSession Session;

    static ApplicationSession()
    {
        if (HttpContext.Current == null)
            Session = new ThreadedCurrentSession();
        else
        {
            Session = new WebCurrentSession();
        }
    }

    public static T GetObject<T>(string key) where T : class
    {
        return (T)Session.GetItem(key);
    }

    public static void SetObject<T>(string key, T t) where T : class
    {
        Session.SetItem(key, t);
    }

}

 public static SysUser CurrentUser
    {
        get
        {
            var currentusr = ApplicationSession.GetObject<SysUser>("CurrentUser");
            if (currentusr == null)
            {
                currentusr = SysUserAccessor.CreateEmptyUser();
                currentusr.SetRoles(new List<FrUserRole>());
                ApplicationSession.SetObject("CurrentUser", currentusr);
            }
            return currentusr;
        }
    }

SysUser 是我的模型,它拖动我的用户和我的用户角色...

如果他们进行身份验证,他们现在是否会共享相同的 SysUser 模型。或者请提供其他帮助 :)

【问题讨论】:

    标签: asp.net session static session-variables static-variables


    【解决方案1】:

    您的 ApplicationSession 类是静态的,您在其静态构造函数上初始化 Session 对象。注意,在第一次访问该类型(例如创建其成员、调用其静态属性等)期间,在整个应用程序生命周期内仅调用一次静态构造函数(或类型构造函数)。 因此,在您的情况下,Session 变量将仅使用 ThreadedCurrentSession 或 WebCurrentSession 类初始化一次(取决于第一次访问 ApplicationSession 类型时是否存在 HttpContect)。

    由于 CurrentUser 属性与您的 Session 对象相关,它将为所有用户请求提供相同的 SysUser 对象。

    【讨论】:

    • 我明白了..你对“SysUser每个人都有自己的”有什么想法。我应该在这里安全地改变什么
    • 我现在从 IIS 两个不同的浏览器测试它我用两个不同的用户登录,我可以看到自己的用户配置文件他们不使用相同的 SysUser
    • 我描述了演示代码块的工作原理。要分析整个应用程序的行为,应该分析整个应用程序代码