[英]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)頁面,並阻止所有用戶。 當頁面將被刪除時,有兩種方法:
管理員取消阻止用戶后,他們可以登錄。 不知道其他人如何,對我來說這不是一個壞問題。 謝謝。
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.