2017-01-30 77 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()

相關問題