2010-02-12 78 views
1

我有一个自定义ASP.NET会话管理器类,如下所示:ASP.NET会话问题

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; } 
     } 

    } 

后用户成功登录到他的全名显示在主页上的系统。以下是我面临的问题:

1)我首先以约翰身份登录系统,John的全名显示在主页上,并且相应的用户对象保持在会话中。

2)现在从另外一台PC我登录到系统作为标记。现在Mark的全名显示在主页上,并且相应的用户对象保持在会话中。

3)现在,当我进入John登录的PC并刷新主页时,我看到Marks的名字而不是Johns的名字。

什么可能是这种奇怪的行为的原因?

回答

2

您的类继承自System.Web.UI.Page,它在第一次访问时将其会话成员设置为HttpContext.Current.Session。由于你有一个单身人士,它将始终引用访问用户属性的第一个会话。

你或许应该做这样的事情:

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; } 
    } 
}