簡體   English   中英

立即關閉或設置用戶注銷

[英]Instantly shut down or set log out for users

我有ASP .NET MVC 2.0 WebApplication,並且我需要有一個名為“關閉”或“全部阻止”的按鈕。 它應該注銷所有用戶,或諸如此類(mb關閉服務器)。

可能嗎? 謝謝。

如果您使用的是表單身份驗證,除非您通過某些會話跟蹤用戶,否則將無法注銷用戶。 Cookie跟蹤經過身份驗證的用戶,即使您使用HttpRuntime.UnloadAppDomain();重新啟動應用程序域,也是如此HttpRuntime.UnloadAppDomain(); 方法客戶端瀏覽器仍然具有身份驗證cookie,並且用戶將在后續請求中自動登錄。 但是,如果在重新啟動應用程序域時在會話中存儲一些特定於用戶的信息,則該信息將被刪除,並且您將知道該用戶不應該再通過身份驗證,因為它沒有關聯的會話數據。

一種可能性是在某處設置一個標志,指示發生了這種情況。 然后在所有控制器上都有一個動作過濾器,以檢查該標志。 如果已設置,請注銷用戶(這取決於您使用的身份驗證類型),並有選擇地將他們重定向到說明正在發生什么情況的頁面。

好的,最終我決定在一種解決方案中采用兩種方法。 首先,它應該在wwwroot目錄中創建App_offline.htm(僅用於beautifull)頁面,並阻止所有用戶。 當頁面將被刪除時,有兩種方法:

  1. Cookie已過期
  2. 打開網頁,但是在第一次單擊后,用戶將被重定向到/ Account / LogOn

管理員取消阻止用戶后,他們可以登錄。 不知道其他人如何,對我來說這不是一個壞問題。 謝謝。

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
{
    //...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM