0

我正在为我正在构建的网站使用表单身份验证,它工作得很好,除了我无法让身份验证 cookie 删除或过期。我尝试了许多方法,但似乎都没有奏效。这是我创建 cookie 的内容。

FormsAuthentication.SetAuthCookie(model.userName, false);

                    HttpCookie cookie = new HttpCookie("user");
                    Response.Cookies["user"].Value = model.userName;

现在第二个 cookie 不是实际的 authcookie,它用于每个客户端请求的站点的一些内部工作。下一部分是我尝试删除 cookie 的各种内容。

FormsAuthentication.SignOut();
        Roles.DeleteCookie();
        Session.Clear();
        //Response.Cache.SetExpires(DateTime.Now);
        //foreach (var cookie in Request.Cookies.AllKeys)
        //{
        //    Request.Cookies.Remove(cookie);
        //}
        //foreach (var cookie in Response.Cookies.AllKeys)
        //{
        //    Response.Cookies.Remove(cookie);
        //}
        //Session.Abandon();

        //// clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Path = FormsAuthentication.FormsCookiePath;
        cookie1.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie1);

        HttpCookie cookie = Request.Cookies["user"];
        string userName = cookie.Value;
        cookie.Expires.AddDays(-30);

        //HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
        //cookie2.Expires = DateTime.Now.AddYears(-1);
        //Response.Cookies.Add(cookie2);

        //HttpCookie cookie = Request.Cookies["user"];
        //cookie.Expires = DateTime.Now.AddDays(-1d);
        //HttpCookie user = Request.Cookies["user"];
        //role.Expires = DateTime.Now.AddDays(-1d);
        //Response.Cookies["user"].Value = null;
        Session.Abandon();

我只是将整个内容剪切并粘贴在那里,其中一些现在已被注释掉,但在某些时候,我尝试使用该代码中的每种方法来删除 cookie。其中一些尝试只是猜测,因为我已经有一段时间了。最后这里是我的 web.config 的 auth 部分

<authentication mode="Forms" >
  <forms loginUrl="~/login" timeout="90" name=".ASPXFORMS" />
</authentication>

感谢任何关于我做错了什么的意见。

4

1 回答 1

0

试着打电话

 FormsAuthentication.SignOut()

在调用会话之前。我通常把它放在一个单独的方法中,以便从多个地方调用。像这样的东西:

internal void SignOut(HttpContext context)
{
     FormsAuthentication.SignOut();

     HttpSessionState session = context.Session;

     if(session != null)
     {
          session.Abandon();
     }
}
于 2013-04-15T22:16:08.330 回答