Asp.net 静态类成员不在不同IP上的不同用户之间共享

Asp.net 静态类成员不在不同IP上的不同用户之间共享,asp.net,global-asax,Asp.net,Global Asax,我已经编写了一个静态类,并假设在所有会话之间共享它的成员。它适用于运行在同一计算机上的所有浏览器,但数据不会在来自不同位置的不同用户之间共享。我的网站是用ASP.NET编写的 这是我的课 public static class GlobalPool { public static List<string> OnlineUsers; } 这不是健壮的代码。ASP.NET应用程序会定期回收(应用程序池),因此所有数据都会消失。 最好的方法是将列表存储在数据库中,当会话过期时,将

我已经编写了一个静态类,并假设在所有会话之间共享它的成员。它适用于运行在同一计算机上的所有浏览器,但数据不会在来自不同位置的不同用户之间共享。我的网站是用ASP.NET编写的

这是我的课

public static class GlobalPool
{
    public static List<string> OnlineUsers;
}

这不是健壮的代码。ASP.NET应用程序会定期回收(应用程序池),因此所有数据都会消失。
最好的方法是将列表存储在数据库中,当会话过期时,将该用户从数据存储中删除。

纠正一下,我很确定它不是在所有用户之间共享的,而是在整个应用程序域中共享的,所以在web场场景中,它是按服务器部署的,是单服务器吗?你到底在哪里给它赋值?你怎么知道它没有被持久化?我用FTP把我的网页上传到我的主机上。我不认为它被分散在多个服务器上。实际上,我在global.asax(应用程序启动)中分配GlobalPool.OnlineUsers,当用户登录到我的protal时,我将其用户名添加到OnlineUsers。如果我在电脑的不同浏览器(1个chrome、1个safari和1个IE)中登录到portan,然后我从FireFox中检查,我看到所有3个用户(使用一个页面转储OnlineUsers列表),但从iPhone中,我看不到他们。我的朋友也不能从家里看到他们。很可能,如果我的朋友使用3种浏览器登录门户,他可以看到它们,但我无法提供将用户名添加到列表中的代码。粗略一看,这看起来不错,您使用的主机是什么?我已经用不同的方式实现了它,但仍然想知道答案。除了回收应用程序池之外,它应该可以在没有任何问题的情况下工作。为什么不呢?
void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    GlobalPool.OnlineUsers = new List<string>(100);
}
public void Login(int aMemberSerial) 
{ 
    User = new MemberDataAccess().Read(aMemberSerial); 
    new MemberDataAccess().Login(User); 
    GlobalPool.OnlineUsers.Add(User.Username); 
    Message = PostBusiness.NewPost(User); 
}