我有ASP .NET MVC 2.0 WebApplication,我需要一个名为“关闭”或“全部阻止”的按钮。它应该注销所有用户,或类似的东西(mb关闭服务器)。
有可能吗? THX。
答案 0 :(得分:0)
如果您使用的是表单身份验证,除非您使用某个会话跟踪用户,则无法将用户注销。通过cookie跟踪经过身份验证的用户,即使您使用HttpRuntime.UnloadAppDomain();
方法重新启动应用程序域,客户端浏览器仍然具有身份验证Cookie,并且用户将在后续请求中自动登录。但是,如果在重新启动应用程序域时在会话中存储某些特定于用户的信息,则会删除此信息,并且您将知道该用户不应再进行身份验证,因为它没有关联的会话数据。
答案 1 :(得分:0)
一种可能性是在某处设置一个标志,表明发生了这种情况。然后在所有控制器上都有一个动作过滤器来检查这个标志。如果已设置,请将用户注销(这取决于您使用的是哪种身份验证),并可选择将其重定向到解释正在进行的操作的页面。
答案 2 :(得分:0)
好的,最后我决定在一个解决方案中制作两种方法。首先,它应该在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
{
//...
}