【问题标题】:Application_End Logout Users in global.asaxApplication_End 注销 global.asax 中的用户
【发布时间】:2017-01-10 03:02:52
【问题描述】:

我想问一下我可以在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/");

        }
    }

【问题讨论】:

    标签: c# asp.net-mvc global-asax


    【解决方案1】:

    不,您不能使用 Application_End 在真实站点中记录 singout。

    由于 Application_End 事件与任何请求无关,因此您无法执行某些操作 - 您无法对特定用户执行操作或在某处重定向响应(因为没有请求/响应开始)。

    确实可以清除或批量更新数据库中的信息,但是“输入用户的注销日期时间”并不能达到你的实际目标。

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

    如果您有一个具有多个服务器的重要站点,则当每台服务器重新启动 IIS 进程时也没有相关性,这使得 Application_End 完全不适合“用户注销”,因为一台服务器可以在其他服务器重新启动时主动服务请求。

    您最好的选择是明确地超时用户会话(即从登录后 40 分钟)或通过更新页面上的每个请求/心跳 AJAX ping 的时间来滑动到期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多