如何销毁ASP.NET/Episerver会话

如何销毁ASP.NET/Episerver会话,asp.net,session,httpcontext,episerver,Asp.net,Session,Httpcontext,Episerver,我正在使用的web应用程序没有正确地破坏会话,这意味着它很容易被劫持。我可以注销,再次在应用程序中输入cookies.EpiserverLogin和.ASPXRoles以及im。我当前销毁会话的代码如下: HttpContext.Current.Session.Clear(); HttpContext.Current.Session.Abandon(); HttpContext.Current.Session.RemoveAll(); HttpContext.Current.User = nul

我正在使用的web应用程序没有正确地破坏会话,这意味着它很容易被劫持。我可以注销,再次在应用程序中输入cookies.EpiserverLogin和.ASPXRoles以及im。我当前销毁会话的代码如下:

HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
HttpContext.Current.Session.RemoveAll();
HttpContext.Current.User = null;
System.Web.Security.FormsAuthentication.SignOut(); 
任何关于我做错了什么的帮助都是非常感谢的

编辑:这是我的web.config中的身份验证

<authentication mode="Forms">
  <forms name=".EPiServerLogin" loginUrl="CustomLogin.aspx" timeout="50" />
</authentication>

会话和身份验证cookie实际上并不相关。如果用户登录,身份验证cookie会告诉web服务器请求来自哪个用户。如果会话因不活动而超时(除非已更改,否则默认为20分钟后超时),则会在下一个请求时为用户创建新会话

如果要将身份验证cookie绑定到特定会话,可以通过生成自己的FormsAuthenticationTicket并将userData设置为会话ID来解决此问题。然后加密该票据并创建cookie并将其发送到客户端。然后,在每个请求中,对票据进行解密,并确保userData值与会话id相同。如果不相同,则执行session.About()和FormsAuthentication.SignOut()。即使恢复了cookie,在创建新会话时会话id也会发生更改


如果您使用的是负载平衡解决方案,并且使用InProc会话状态,则此解决方案将不起作用。

请发布您的web.config的和部分。我已使用logincode和身份验证模式进行了更新。您是否可以备份您的声明“它很容易被劫持”?你说的是什么类型的劫持?会话劫持,或登录劫持(FormsAuth cookie)?EPiServer使用自己的成员资格提供程序。您可能需要将用户注销该类。
var validated = Membership.ValidateUser(username, password);
if (validated)
{
   FormsAuthentication.SetAuthCookie(username, true);
   Response.Redirect("/");
}