如何使会话无效?
REPRO:
无论如何,以前复制的cookie都无效吗?
我正在使用标准的MVC5注销功能。
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
还尝试退出cookie。
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
更改SecurityStamp的想法也可行,但由于索赔没有改变,邮票也没有。
UserManager.UpdateSecurityStampAsync(user.UserName);
我也尝试过这个函数,文档说这应该使会话无效。 http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon(v=vs.110).aspx
Session.Abandon();
答案 0 :(得分:0)
我不知道您描述的cookie问题,但是我需要让用户通过桌面应用程序使会话无效。因此,桌面上的用户可以将某人踢出该Web应用程序。我是通过在他们登录时创建一个GUID并将GUID存储在我的数据库和cookie中来实现的。然后,我重写AuthorizeAttribute.AuthorizeCore来检查数据库上的GUID仍然有效。我的GUID表中有一列IsValid,当他们注销或桌面上有人将其退出时,我将IsValid更改为false。
如果您有一个具有KeyId和IsValid列的类似会话表,请覆盖AuthorizeAttribute.AuthorizeCore。您可以检查数据库中的IsValid列是否依赖于Cookie。
我希望能给您一个想法。
答案 1 :(得分:-1)
我不知道如何“使cookie”本身“无效”,但如果您需要的是使重用cookie的请求无效,那么您可以跟踪会话的状态,并在请求后检查此状态认证
用于跟踪会话:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
...
await SignInAsync(user, model.RememberMe);
Session["IsValid"] = true; // Tells that the session is valid
...
}
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
Session["IsValid"] = false; // The session is no longer valid
...
}
在Global.asax
中protected void Session_End(Object sender, EventArgs e)
{
Session["IsValid"] = false; // Invalidate the session here too
}
protected void Application_AcquireRequestState(Object sender, EventArgs e)
{
if (Request.IsAuthenticated && // The cookie tells that the request is authenticated...
!(bool) HttpContext.Current.Session["IsValid"]) // but the session status is NOT valid
{
// Handle requests that re-use the auth cookie
}
}