Session Storage vs Class Storage

asp.net, c#, class, session-variables

Solution

I found this approach is one of the most easy to use and with least error of chances. I think this is called Facade Design Pattern.

 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

}

Values can be store in Session like this:

 SiteSession.Current.UserType = user.UserType;

And Can be obtain like this :

int userId=    SiteSession.Current.UserID;

It is type safe as well.

Problem

I have always stored data for a user (after they logged in) in a Session variable, so I can use that data on any page. I found out that another way to store information globally is to store it in a class, using `{ get; set;}`, and then calling that from any page. Right now, I've used both these methods as a test, and they both work really well: `Session["LoginId"] = rdr["uniqueIdentifier"].ToString();` And `Member.LoginId = rdr["uniqueIdentifier"].ToString();` Where (In Member.cs) ``` 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 ``` void Session_End(object sender, EventArgs e) { Member.ClearVariables(); } ``` My question is, is it safe enough to store user data in a class like this, or should I stick with `Session` objects? Updated for Completeness Will this post do something like above, but for multiple users? How to access session variables from any class in ASP.NET?

Original source

Related problems