首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话存储与类存储

会话存储与类存储
EN

Stack Overflow用户
提问于 2012-10-23 06:16:40
回答 6查看 6.8K关注 0票数 4

我总是将用户的数据(登录后)存储在会话变量中,所以我可以在任何页面上使用这些数据。

我发现另一种全局存储信息的方法是使用{ get; set;}将其存储在类中,然后从任何页面调用这些信息。

现在,我使用了这两种方法作为测试,它们都很好地工作:

Session["LoginId"] = rdr["uniqueIdentifier"].ToString();

Member.LoginId = rdr["uniqueIdentifier"].ToString();

Where (在Member.cs)

代码语言:javascript
复制
public class Member
{
    public static int Challenges { get; set; }
    public static int NicknameId { get; set; }
    public static string LoginId { get; set; }
    public static string FriendsListId { get; set; }

    public static void ClearVariables()
    {
        Challenges = 0;
        NicknameId = 0;
        LoginId = null;
        FriendsListId = null;
    }
}

Global.asax

代码语言:javascript
复制
void Session_End(object sender, EventArgs e) 
    {
        Member.ClearVariables();
    }

我的问题是,在这样的类中存储用户数据是否足够安全,还是应该继续使用Session对象?

为了完整,更新了,这篇文章会像上面那样做吗,但是对多个用户呢?How to access session variables from any class in ASP.NET?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-23 07:44:34

我发现这种方法是最容易使用和机会最少的方法之一。我认为这就是所谓的外观设计模式。

代码语言:javascript
复制
 public class SiteSession
{
    #region Attributes
    private static string _siteSession = "__SiteSession__";
    #endregion

    #region Constructor
    private SiteSession()
    {
    }
    #endregion

    #region CurrentSession
    public static SiteSession Current
    {
        get
        {
            SiteSession session = HttpContext.Current.Session[_siteSession ] as    SiteSession;
            if (session == null)
            {
                session = new SiteSession();
                HttpContext.Current.Session[_siteSession ] = session;
            }
            return session;
        }
    }
    #endregion

    #region SessionProperties
    public sherserve.CustomTypes.UserTypes UserType { get; set; }
    public int UserID { get; set; }
    public String StaffID { get; set; }
    public String Position { get; set; }
    public String StaffName { get; set; }
    public int TimeZone { get; set; }

    public String DealerId { get; set; }
    public String DealerPosition { get; set; }
    public String DealerName { get; set; }
    public int DealerFirmId { get; set; }

    public String ClientId { get; set; }
    public String ClientName { get; set; }
    public String ClientBusiness { get; set; }
    public String CountryCode { get; set; }
    public int ClientFirmId { get; set; }
    #endregion

}

值可以存储在以下会话中:

代码语言:javascript
复制
 SiteSession.Current.UserType = user.UserType;

并且可以这样获得:

代码语言:javascript
复制
int userId=    SiteSession.Current.UserID;

它也是类型安全的。

票数 8
EN

Stack Overflow用户

发布于 2012-10-23 06:18:33

在您的示例中,这一点都不安全,因为asp.net中的静态变量对所有用户都是通用的。

票数 8
EN

Stack Overflow用户

发布于 2012-10-23 06:19:38

使用静态变量是不安全的。为一个用户设置的值将覆盖另一个用户的值。

静态变量意味着只为所有会话创建和使用一个变量。静态变量的生命周期是应用寿命。

如果您的变量是特定于用户的(看起来是这样的),那么您需要坚持使用会话变量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13024516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档