在超时和强制注销时将用户重定向到登录页面

时间:2015-04-21 02:06:06

标签: c# asp.net-mvc asp.net-mvc-4 authentication redirect

我在我的项目中使用自定义成员资格提供程序和MVC4。

我有两个与身份验证相关的方案:

  1. 当身份验证超时时,将用户重定向到登录页面。

    • 为此,我尝试在Global.asax.cs文件中的Logout操作和Application_BeginRequest()中使用以下代码。将此代码放在Logout操作中并没有帮助,我将以下代码放在Application_BeginRequest()

      中并不确定性能是否受到影响
      Response.Cache.SetCacheability(HttpCacheability.NoCache);
      Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
      Response.Cache.SetNoStore();
      
  2. 在某些情况下,我想强制注销用户,然后重定向到登录页面。

    • 如果我从Global.asax.cs中的Application_AuthorizeRequest重定向,那么该网站将进入重定向循环。
  3. 有任何建议或参考吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我会假设你正在使用基于cookie的身份验证。对于超时注销,您应该使用默认的表单身份验证cookie机制。目前,您在用户注销时禁用缓存,但您也需要删除/使会话或身份验证cookie无效。

首先在你的web.config中你应该有这个元素:

<authentication>
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

然后在您的Logout方法中:

FormsAuthentication.SignOut();
Session.Abandon();

// invalidate authentication cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie);

您可以将此代码与一些花哨的jQuery / Vanilla JavaScript例程混合,以在不活动期后自动注销用户,从而改善用户体验。有些人在无效cookie和将用户重定向到另一个URL时尝试了奇怪的行为,这个问题与浏览器如何解析301响应有关,为了避免这个问题,你可以直接从logout方法返回登录视图