首先,这不是ASP.NET会话未到期的问题,我们在注销时清除,放弃和删除每个cookie。
这是关于FormsAuthentication.SignOut()在调用时没有使票证到期,并且允许复制cookie内容的人在其他地方手动创建cookie,并且仍然能够访问现在被阻止的所有内容。注销。
以下是我们注销方法的要点:
HttpContext.Current.User = null;
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
HttpContext.Current.Session.RemoveAll();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
我们还让ASP通过我们的Web.config和其他任何管理FormsAuthentication的方式来管理故障单和身份验证的创建。以下是配置中的内容:
<authentication mode="Forms">
<forms name="COOKIENAME" loginUrl="~/PAGE_THAT_REDIRECTS_TO_LOGIN.aspx" defaultUrl="~/PAGE_THAT_REDIRECTS_TO_LOGIN_OR_PROPER_PAGE_IF_LOGGED_IN.aspx" cookieless="UseCookies" timeout="60" />
</authentication>
现在,为什么这是一个问题?简单来说,这是一个安全问题,就像有人获得cookie并使其保持活动状态一样,即使用户已经断开连接,他们也可以访问与cookie匹配的任何用户。
是否有正确的方法强制FormsAuthenticationTicket过期? 我尝试解密它,但一切都是只读的,我还试图创建一个新的过期票并对其进行加密,但它并没有覆盖旧票。
由于
版本:.NET 4.5.1,ASP.NET(非核心)
答案 0 :(得分:0)
基本问题是Microsoft .net Core cookie Managemnt,它不能正确处理cookie的生存期。
我已经多次遇到此问题,现在主要使用.Net内核。
要解决此问题,我们需要覆盖其cookie管理类,并实现ITicketStore接口。
下面的文章可以帮助您进行详细的实现。
https://mikerussellnz.github.io/.NET-Core-Auth-Ticket-Redis/
希望对您有帮助。