【问题标题】:ASP.Net delete/expire session cookiesASP.Net 删除/过期会话 cookie
【发布时间】:2017-03-16 12:17:27
【问题描述】:

我们有许多公司内部的 ASP.Net 应用程序。所有都使用表单身份验证,并且都是基于会话的......

我想要做的是当用户退出一个应用程序时,他/她会退出所有应用程序。

我有一些迭代 cookie 集合的逻辑。我可以看到所有其他 ASP.Net 应用程序,但我无法删除它们。

我目前使用以下逻辑:

// expire all asp.net app tickets
        string[] allDomainCookes = HttpContext.Current.Request.Cookies.AllKeys;

        foreach (string domainCookie in allDomainCookes)
        {
            if (domainCookie.Contains("ASPXAUTH"))
            {
                var expiredCookie = new HttpCookie(domainCookie) { Expires = DateTime.Now.AddDays(-1) };
                HttpContext.Current.Response.Cookies.Add(expiredCookie);
            }
        }
        HttpContext.Current.Request.Cookies.Clear();

由于某种原因,它们没有被删除。我知道它们都在那里,因为我已将它们写到页面上。它们只是没有被删除....这是因为这些是会话 cookie 吗?

另外我应该补充一下,它们都是某个域的子域,所以所有权应该不是问题?

【问题讨论】:

    标签: c# asp.net session cookies


    【解决方案1】:

    试试这个代码..对我有用

                FormsAuthentication.SignOut();
                HttpContext.Current.Session.Clear();
                HttpContext.Current.Session.Abandon();
                HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
                cookie1.Expires = DateTime.Now.AddYears(-1);
                HttpContext.Current.Response.Cookies.Add(cookie1);
                HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
                cookie2.Expires = DateTime.Now.AddYears(-1);
                HttpContext.Current.Response.Cookies.Add(cookie2);
    

    【讨论】:

    • 他显然正在实施他自己的身份验证系统,这个FormsAuthentication.SignOut(); 不应该在那里。
    • Session.Clear();会话.Abandon();为我工作
    【解决方案2】:

    实际上...我刚刚发现了问题。我还需要指定域

    string[] allDomainCookes = HttpContext.Current.Request.Cookies.AllKeys;
    
        foreach (string domainCookie in allDomainCookes)
        {
            if (domainCookie.Contains("ASPXAUTH"))
            {
                var expiredCookie = new HttpCookie(domainCookie) { 
                      Expires = DateTime.Now.AddDays(-1),
                      Domain = ".mydomain"
                };
                HttpContext.Current.Response.Cookies.Add(expiredCookie);
            }
        }
        HttpContext.Current.Request.Cookies.Clear();
    

    【讨论】:

      【解决方案3】:

      Cookies 仅适用于同一域。如果是跨域,则需要另一种解决方案。 Here is another article about Asp.net cookie

      【讨论】:

      • 您好,这些不是跨域的。这些是子域,即 website1.contonso.com 和 website2.contonso.com 等
      • 即使跨域,CORS 也能克服这种破坏 cookie 的限制。
      猜你喜欢
      • 2012-08-12
      • 2016-11-08
      • 2011-01-13
      • 2013-09-12
      • 2011-07-24
      • 2016-06-02
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      相关资源
      最近更新 更多