当用户注销时,application["Usersonline"] 不会减少
When user logsoff, application["Usersonline"] dont decrease
我正在使用我找到的代码 here。
当用户正确登录时,它会将值+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();
}
}
您计算的不是 logged-in 用户数,而是会话数。在你登录之前,你已经有一个session,在你注销之后,你还有一个session,除非你销毁它。
您可以通过在您的注销代码中调用 Session.Abandon
来强制结束会话,可能在您的 AccountController
.
session_end 事件在会话结束时触发,而不是在用户注销时触发。
会话结束:
- 超时后服务器未收到该会话的请求。
Session.Abandon
已调用。
当您注销用户时,他们仍然有一个会话,但该会话现在未经身份验证。
您可以调用 Session.Abandon
来强制调用 End 事件。但是请注意,仅当会话存储在 InProc 中时才会触发会话结束事件(来自HttpSessionState.Mode
)
如果您使用的是内置 ASP.NET 会员提供程序,则有一个方法 Membership.GetNumberOfUsersOnline()
。
我正在使用我找到的代码 here。
当用户正确登录时,它会将值+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();
}
}
您计算的不是 logged-in 用户数,而是会话数。在你登录之前,你已经有一个session,在你注销之后,你还有一个session,除非你销毁它。
您可以通过在您的注销代码中调用 Session.Abandon
来强制结束会话,可能在您的 AccountController
.
session_end 事件在会话结束时触发,而不是在用户注销时触发。
会话结束:
- 超时后服务器未收到该会话的请求。
Session.Abandon
已调用。
当您注销用户时,他们仍然有一个会话,但该会话现在未经身份验证。
您可以调用 Session.Abandon
来强制调用 End 事件。但是请注意,仅当会话存储在 InProc 中时才会触发会话结束事件(来自HttpSessionState.Mode
)
如果您使用的是内置 ASP.NET 会员提供程序,则有一个方法 Membership.GetNumberOfUsersOnline()
。