views:

29

answers:

1

I have a custom ASP.NET session manager class as follows:

public sealed class SessionManager : Page
    {
        private const string USER = "User";

        private static readonly SessionManager _instance = new SessionManager();

        private SessionManager()
        {
        }


        public static SessionManager Instance
        {
            get { return _instance; }
        }


        public User User
        {
            get { return Session[USER] as User; }
            set { Session[USER] = value; }
        }

    }

After a user successfully logs into the system his full name is displayed on the Home page. Below is the problem I am facing:

1) I first log into the system as John and John's full name is displayed on the homepage and the corresponding user object is kept in session.

2) Now from a different PC I login to the system as Mark. Now Mark's full name is displayed on the homepage and the corresponding user object is kept in session.

3) Now when I go to the PC from which John has logged in and refresh the homepage I see Marks name instead of Johns name.

What could be the reason for this strange behavior?

+1  A: 

Your class inherits from System.Web.UI.Page, which sets its Session member to HttpContext.Current.Session on first access. Since you have a singleton, it will always refer to the first session in which the User property was accessed.

You probably should do something like this:

public sealed class SessionManager
{
    private const string USER = "User";

    private static readonly SessionManager _instance = new SessionManager();

    private SessionManager()
    {
    }

    public static SessionManager Instance
    {
        get { return _instance; }
    }

    public User User
    {
        get { return HttpContext.Current.Session[USER] as User; }
        set { HttpContext.Current.Session[USER] = value; }
    }
}
Lachlan Roche