2017-01-30 67 views
1

我使用的代码是here当用户注销时,应用程序[“Usersonline”]不会减少

当用户正确地将它登录到值ad +1时,但是当用户注销它时,不会减少该值。有人能告诉我这是什么原因吗?

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     Application["OnlineUsers"] = 0; 
    } 

    void Session_Start(object sender, EventArgs e) 
    { 
     Application.Lock(); 
     Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1; 
     Application.UnLock(); 
    } 

    void Session_End(object sender, EventArgs e) 
    { 
     Application.Lock(); 
     Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1; 
     Application.UnLock(); 
    } 
} 

回答

1

您不计算登录用户的数量,您正在计算会话的数量。在您登录之前,您已经有一个会话,并且在您注销之后,您仍然拥有一个会话,除非您将其销毁。

您可以通过在注销代码中调用Session.Abandon来结束会话,可能在您的AccountController中。

+0

感谢您的回复,我在我的注销中添加了'Session.Abandon()',并且在某人注销时它仍然不减少Count,它的标准mvc还没有改变任何东西 –

+0

您确定Session_End被调用吗? –

1

session_end事件会在会话结束时触发,而不是在用户注销时触发。

在会话结束:超时已经发生并且服务器尚未收到该会话请求

  1. 后。
  2. Session.Abandon已被调用。

当您登录用户时,他们仍然有一个会话,但该会话现在未经过身份验证。

您可以致电Session.Abandon强制结束事件被调用。但请注意,如果会话存储在InProc中()

0

只会触发会话结束事件如果您在构建ASP.NET成员资格提供程序中使用,则有一种方法Membership.GetNumberOfUsersOnline()

相关问题