我在我的项目中使用自定义成员资格提供程序和MVC4。
我有两个与身份验证相关的方案:
当身份验证超时时,将用户重定向到登录页面。
为此,我尝试在Global.asax.cs文件中的Logout操作和Application_BeginRequest()中使用以下代码。将此代码放在Logout操作中并没有帮助,我将以下代码放在Application_BeginRequest()
中并不确定性能是否受到影响Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
在某些情况下,我想强制注销用户,然后重定向到登录页面。
有任何建议或参考吗?提前谢谢。
答案 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方法返回登录视图