立即关闭或为用户设置注销

时间:2011-02-18 21:25:02

标签: .net asp.net asp.net-mvc

我有ASP .NET MVC 2.0 WebApplication,我需要一个名为“关闭”或“全部阻止”的按钮。它应该注销所有用户,或类似的东西(mb关闭服务器)。

有可能吗? THX。

3 个答案:

答案 0 :(得分:0)

如果您使用的是表单身份验证,除非您使用某个会话跟踪用户,则无法将用户注销。通过cookie跟踪经过身份验证的用户,即使您使用HttpRuntime.UnloadAppDomain();方法重新启动应用程序域,客户端浏览器仍然具有身份验证Cookie,并且用户将在后续请求中自动登录。但是,如果在重新启动应用程序域时在会话中存储某些特定于用户的信息,则会删除此信息,并且您将知道该用户不应再进行身份验证,因为它没有关联的会话数据。

答案 1 :(得分:0)

一种可能性是在某处设置一个标志,表明发生了这种情况。然后在所有控制器上都有一个动作过滤器来检查这个标志。如果已设置,请将用户注销(这取决于您使用的是哪种身份验证),并可选择将其重定向到解释正在进行的操作的页面。

答案 2 :(得分:0)

好的,最后我决定在一个解决方案中制作两种方法。首先,它应该在wwwroot目录中创建App_offline.htm(仅用于beautifull)页面并阻止所有用户。当页面被删除时,有两种方式:

  1. Cookie已过期
  2. 首先打开网页 单击,用户将被重定向到 /帐户/ LogOn支持
  3. 管理员取消阻止用户后,他们可以登录。不知道其他什么,对我来说不是那么糟糕的问题。大家好。

    public class LogActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if (Membership.GetUser(HttpContext.Current.User.Identity.Name).IsLockedOut)
            {
                IFormsAuthenticationService FormsService = new FormsAuthenticationService();
                FormsService.SignOut();
            }
            // The action filter logic.
        }
    }
    

    在控制器中

    public ActionResult ShutDown()
    {
        StreamWriter sw = new StreamWriter("C:\\inetpub\\wwwroot\\iMagazin\\App_offline.htm");
        sw.Close();
        _dataManager.Users.BlockAll();
        return RedirectToAction("LogOn", "Account");
    }
    

    将ActionFilter应用于控制器

    [SUPNew.Models.Extansions.LogActionFilter]
    public class SuperadministratorController : Controller
    {
        //...
    }