2012-03-18 51 views

回答

0

是去Global.asax中并创建Application_Start事件User类类型的新List<>,并保存到缓存

List<User> OnlineUsers = new List<User>(); 
    Cache.Insert ("onlineuser",OnlineUsers,...); 

,并在您loginButton代码得到缓存列表中,并添加登录用户

User loggedin =someHelperCode.GetUser (txtUserName.Text,txtPassword.Text); 
    ((List<User>)Cache["onlineuser"]).Add (loggedin); 

,并在用户注销时做同样的和删除用户

,你可以直接绑定列表,任何丢失结合的辅ntrol

+0

如果用户关闭浏览器而不注销会发生什么? – Kaf 2012-03-18 14:45:13

+0

这难道不是线程安全问题吗? – CodesInChaos 2012-03-18 14:45:20

+1

如果用户由于会话过期而退出而不是显式注销,会发生什么情况? (由Kaf殴打 - 下次必须输入更快) – KazR 2012-03-18 14:49:17

2

您可以通过这样做:

var onlineUsers = System.Web.Security.Membership.GetAllUsers() 
    .Cast<System.Web.Security.MembershipUser>() 
    .Where(user => user.IsOnline); 

但你需要缓存/正确刷新这一点,因为它可以是一个非常昂贵的操作。