【问题标题】:Can I delete ASP.NET authentication cookie (.ASPXAUTH) using JavaScript?我可以使用 JavaScript 删除 ASP.NET 身份验证 cookie (.ASPXAUTH) 吗?
【发布时间】:2012-05-08 15:35:55
【问题描述】:

我可以使用 JavaScript 删除 ASP.NET 身份验证 cookie (.ASPXAUTH) 吗?我想在我的 ASP.NET/JavaScript 移动应用程序上实现注销功能,而无需往返服务器。但是,由于某种原因,这种方法不起作用。

document.cookie = '.ASPXAUTH=; expires=Thu, 01-Jan-70 00:00:01 GMT;';

我该怎么办?

谢谢。

更新:好的,我阅读了有关 HttpOnly cookie 的信息,情况正是如此。为了使 cookie 不是 HttpOnly,将以下行添加到 web.config(system.web 部分):

<httpCookies httpOnlyCookies="false"/>

更新:上面的方法不起作用——ASP.NET 只是忽略了该指令。我最终在 Global.asax 中做了这个 hack:

protected void Application_EndRequest(Object sender, EventArgs e)
{
    string cookieName = System.Web.Security.FormsAuthentication.FormsCookieName;
    if (Response.Cookies.Count > 0)
    {
        foreach (string s in Response.Cookies.AllKeys)
        {
            if (s == cookieName)
            {
                Response.Cookies[cookieName].HttpOnly = false;
            }
        }
    }
}

【问题讨论】:

  • 我想说你也想在服务器上注销,以便清理会话状态等。
  • 好吧,我不使用会话状态,因为它是一个 JavaScript 客户端应用程序。我使用服务器部分进行身份验证和 REST API。
  • @Alex Avrutin 感谢您的快速更新:)。您可以将其发布为您自己问题的答案并接受它。
  • 但是,我仍然需要弄清楚如何使 cookie 不是 HttpOnly。
  • 这是一种非常聪明的注销方式。仍然对安全性感到疑惑,但值得一票。

标签: javascript asp.net forms-authentication


【解决方案1】:

您无需删除cookie即可注销用户,只需将“expires”值设置为昨天,然后BOOM,用户已注销。

考虑一下这篇非常有用的博文:Using cookies in Javascript part 1

【讨论】:

  • 谢谢,但是如果 cookie 是 HttpOnly,我什至无法读取它,也无法修改 'expires' 值。
猜你喜欢
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2016-03-23
  • 2010-12-11
  • 2011-08-19
  • 2012-02-08
相关资源
最近更新 更多