我在用户注销时删除cookie时遇到的麻烦。
我正在学习MVC Asp.Net并且我已经创建了默认的MVC5应用程序。我已注册并使用帐户登录,一切正常。但是当我点击注销它正在工作时,它会将我重定向到主页,但它不会删除cookie。
我正在使用this扩展程序检查Cookie"编辑此Cookie"。
首先我登录然后使用EditThisCookie扩展名复制cookie,然后注销并删除cookie。现在,当我将复制的cookie粘贴到EditTshiCookie扩展中并刷新页面时,它会使用相同的帐户登录。 Cookie不会被删除。
LogOff方法
// POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return RedirectToAction("Index", "Home");
}
尝试了这个
Request.GetOwinContext().Authentication.SignOut();
Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.Current.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
答案 0 :(得分:2)
您理解基于cookie的身份验证的方式是错误的:)
AuthorizeAttribute
Session.Abandon
无效,因为DefaultAuthenticationTypes.ApplicationCookie
不是基于会话的。
如果这不是所希望的行为。您可以向会话添加一些标记(IsAuthorized
)并签入。Global.asax Application_PreRequestHandlerExecute
然后重定向到登录表单。这样您就可以获得有关服务器和客户端的信息。但请记住,如果服务器会话状态失败(例如重启IIS),所有实际登录的用户都将被注销。
有关基于Cookie的身份验证的更多信息link
答案 1 :(得分:0)
无论如何,回复很晚,试图减少无法回答的堆栈溢出负载。
要识别每个请求,服务器会为Web应用程序的每个用户分配一个唯一的会话ID 。服务器通过会话ID 识别用户。用户的服务器端会话在会话ID 上分配。将其视为下面的模型。
Session ID
|---------------- Session 1
|---------------- Session 2
(放弃cookie会话时,将从服务器中删除所有相关的.NET会话)
因此,当您从浏览器中删除会话cookie时,服务器不会识别请求并将其视为新请求,而且用户似乎已经注销。
但是,由于服务器尚未放弃/删除会话,如果您尝试在浏览器中再次使用复制的会话值,服务器将识别请求的会话ID 用户将再次登录。
你也可以尝试使用不同的浏览器和机器。
答案 2 :(得分:-1)
这个对我有用..
public ActionResult LogOff()
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return RedirectToAction("Login", "Account");
Response.Cookies.Clear();
FormsAuthentication.SignOut();
HttpCookie c = new HttpCookie("Login");
c.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(c);
Session.Clear();
}
和javascript一样
function userLogOff() {
location.replace("/Account/LogOff");
}