Application_End注销global.asax中的用户

本文关键字:用户 asax global End 注销 Application | 更新日期: 2023-09-27 18:05:20

我想问我可以在Application_End注销用户吗??,我知道当Application_End调用Application_End global.asax

但是我只是想知道在应用程序端让所有用户退出是否正确,我只是想输入用户的注销日期时间。

    void Application_End(object sender, EventArgs e)
    {
        try
        {
            var LisLoginUsers = db.USER_LOGIN.Where(z => z.LOGOUT_DATETIME == null).ToList();
            if (LisLoginUsers.Count != 0)
            {
                for (int i = 0; i < LisLoginUsers.Count; i++)
                {
                    LisLoginUsers[i].LOGOUT_DATETIME = System.DateTime.Now;
                    db.SaveChanges();
                }
            }
        }
        catch (Exception msg)
        {
            ExceptionLogging.SendErrorToText(msg);
            Response.Redirect("/Account/Error/");
        }
    }

Application_End注销global.asax中的用户

不可以,您不能使用Application_End在实际站点中记录单点。

因为Application_End事件没有绑定到任何请求,所以有些事情你不能做——你不能对特定的用户或重定向响应(因为没有请求/响应开始)。

确实你可以擦除或批量更新数据库中的信息,但它不会达到你的实际目标,"输入登出日期时间的用户"。

应用程序关闭与任何用户行为无关——它只与出于任何原因停止服务器端代码有关(例如,由于更新或不活动而重新启动站点)。从用户的角度来看,他们可能仍然在浏览页面,并认为自己"登录"了。

如果您的站点有多个服务器,那么当每个服务器重启IIS进程时也没有相关性,使得Application_End完全不适合"用户注销",因为当其他服务器重新启动时,一个服务器可以积极地处理请求。

最好的办法是显式地让用户会话超时(即从登录开始40分钟),或者通过更新来自页面的每个请求/心跳AJAX ping的时间来滑动过期。