服务器上的FormsAuthentication.SignOut()

时间:2010-05-05 11:17:46

标签: asp.net-mvc

FormsAuthentication.SignOut(),据我所知,它只会杀死浏览器中的cookie。即如果要保存cookie并且在FormsAuthentication.SignOut()再次使用之后,则对用户进行身份验证。如何杀死服务器上的会话?即使任何cookie无效?

我有ASP.NET MVC。

HttpContext.Session.Abandon()不起作用。

3 个答案:

答案 0 :(得分:2)

通过使用默认表单身份验证机制,您无法实现此目的。 cookie将在给定的时间段内有效,如果黑客获取此cookie,无论您做什么,在这段时间内他都可以进入该站点。实现此目的的唯一方法是通过将令牌存储到数据库中并在FormsAuthentication.SignOut()上使它们到期来手动处理它,以便它们不能被重用。

所以我的建议:

  • 始终使用SSL
  • 为Cookie定义固定的有效期,永远不要将slidingExpiration设置为true。

答案 1 :(得分:1)

你没有。好吧,你可以更改机器密钥,但这需要弹出服务器并使每个人的 cookie无效。

您要问的是Forms身份验证无法提供的内容。表单身份验证不存储有效cookie的持久列表。您必须编写或查找自定义提供程序(或自定义表单)才能执行此操作。

答案 2 :(得分:0)

这对我有用

public virtual ActionResult LogOff()
    {
        FormsAuthentication.SignOut();
        foreach (var cookie in Request.Cookies.AllKeys)
        {
            Request.Cookies.Remove(cookie);
        }
        foreach (var cookie in Response.Cookies.AllKeys)
        {
            Response.Cookies.Remove(cookie);
        }
        return RedirectToAction(MVC.Home.Index());
    }