C# 将某人从web应用程序注销的最佳方式是什么?

C# 将某人从web应用程序注销的最佳方式是什么?,c#,asp.net,security,session-state,fiddler,C#,Asp.net,Security,Session State,Fiddler,我有一个需要用户名和密码的应用程序。当用户单击“注销”按钮时,它将运行: private void LogOut() { Session["SessionName"] = null; Session.Remove("SessionName"); System.Web.Security.FormsAuthentication.SignOut(); Response.Cookies.Remove("AuthCookie"); HttpCookie c = n

我有一个需要用户名和密码的应用程序。当用户单击“注销”按钮时,它将运行:

private void LogOut()
{
    Session["SessionName"] = null;
    Session.Remove("SessionName");
    System.Web.Security.FormsAuthentication.SignOut();

    Response.Cookies.Remove("AuthCookie");
    HttpCookie c = new HttpCookie("AuthCookie");
    c.Expires = DateTime.Now.AddYears(-1);
    Response.Cookies.Add(c);

    Session.Clear();
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.Now.AddDays(-1));
    Response.Cache.SetNoStore();
    Response.Cache.SetNoServerCaching();

    Session.Abandon();

    Response.Redirect("~/user/login.aspx");
}
问题是当我测试安全性时。当我转到页面更改数据库中的数据时,我可以使用“记录”此请求在我注销应用程序后,我仍然可以在Fiddler中重播此请求,就像我仍然登录一样。事实上,当我在代码中插入中断符时,我仍然可以看到所有cookie和会话信息。只有在会话过期(超时)后,实际会话才会消失

为什么我在cookie过期并放弃会话后仍然可以看到这些信息?当用户单击注销按钮时,如何才能完全清除cookie和会话信息?

根据MSDN()

调用SignOut方法只会删除表单身份验证cookie。Web服务器未存储有效和过期的身份验证票证以供以后比较。如果恶意用户获得有效的表单身份验证cookie,则会使您的站点容易受到重播攻击

他们给出了三种减轻这种风险的方法。只有最后一种方法(使用持久存储自己跟踪登录状态)会阻止实际用户重播请求。第一种方法只是减少了漏洞出现的时间窗口,第二种方法使Cookie免受第三方的攻击