我的网站有一个奇怪的问题,我不知道问题的原因是什么。
采取这种情况:
UserA注销。执行此代码块:
HttpContext.GetOwinContext().Authentication.SignOut();
Session.Clear();
Session.Abandon();
Session.RemoveAll();
Request.Cookies["ASP.NET_SessionId"].Expires = DateTime.UtcNow.AddDays(-1d);
Response.Cookies["ASP.NET_SessionId"].Value = "";
Response.Cookies.Add(Request.Cookies["ASP.NET_SessionId"]);
return Redirect($"{AppSettings.PublicLandingPage}/loggedout");
UserB登录。
我现在的问题:
问候!
答案 0 :(得分:3)
您将身份验证与会话混合在一起 - 这些是单独的概念 - 您可以在没有经过身份验证的情况下拥有活动会话,也可以在没有活动会话的情况下进行身份验证。
至于为什么要进行身份验证 - 这是设计使然。身份验证cookie包含所谓的票证 - 通常它由加密的UserID,Timestamp(在时间戳到期后cookie无用)和其他一些信息组成。服务器内存中没有任何内容 - 因此您可以拥有负载平衡器/ Web服务器场,并且可以无缝地对用户进行身份验证。 Cookie(基于加密时间戳)可以使用绝对过期或滑动过期。如果使用滑动过期服务器(一旦浏览器发送请求和滑动过期时间的一半已经过去)用新的时间戳替换auth cookie。
如果你担心cookie被盗 - 请先检查你是否使用https和http-only cookies :)如果你需要加强安全性,请注意基于IP的cookie保护会导致可用性问题 - 比如当您使用笔记本电脑/手机从一个wifi移动到另一个wifi时 - 您已经注销,还有其他可以用作浏览器指纹的东西 - 比如用户代理字符串等。