【问题标题】:log out user in Global.asax在 Global.asax 中注销用户
【发布时间】:2011-12-29 18:04:48
【问题描述】:

我在扭一个简单的网络游戏, 在特定的时间,每天,游戏都会更新,到时候,首先我需要注销用户。 在 Global.asax 的 "Application_Start" 函数中,我初始化计时器,当它滴答作响时,我在 Global.asax 中编写的方法 "UpdateGame" 被调用。方法如下:

    public static void UpdateGame()
    {

        AccountController account = new AccountController();
        AdminController admin = new AdminController();
        HomeController home = new HomeController();

        account.LogOff();
        admin.ChechHireEndTimes();
        admin.CheckRentsEndTimes();
        admin.UpdateRankings();
        admin.InitializeAbstractTimes();
    }

当它来到 logOff() 时,它会冻结。这里是注销方法:

    [Authorize]
    public ActionResult LogOff()
    {

            FormsService.SignOut();
            return RedirectToAction("Index", "Home");            
    }

我为此做了很多工作,但似乎因为注销不是通过 http 请求调用的,所以它不像用户按下注销按钮时那样工作。

所以我的问题是,我怎样才能从 Global.asax 内部调用像这样的控制器操作?

【问题讨论】:

  • 这个answer 可能对你有帮助。
  • 是的,谢谢 Eranga,这是我的回答。

标签: asp.net


【解决方案1】:

如果没有用户上下文,您无法在 global.asax 中执行注销操作。执行account.LogOff() 时应该注销哪个用户?我相信使用 app_start 进行重定向 (RedirectToAction) 可能会冻结您的应用。

要注销所有用户,您可以使用LastUpdated 全局标志(由 UpdateGame 方法设置为当前时间)。登录时,您可以将 LastUpdated 值放入用户会话中,并在每个请求中将该值与全局值进行检查。如果全局值更高,则您已通过调用注销方法注销当前用户。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2018-06-07
    • 2018-06-20
    • 2013-07-30
    相关资源
    最近更新 更多