ASP.Net删除/过期会话cookie

时间:2016-11-03 01:51:23

标签: c# asp.net session cookies

我们有许多内部公司的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吗?

另外我应该添加它们是某个域的所有子域,所以所有权不应该成为问题吗?

3 个答案:

答案 0 :(得分:3)

其实......我刚刚发现了这个问题。我还需要指定域

SmtpClient client = new SmtpClient("mysmtpserver");
client.EnableSsl = true;
client.Port = 587;
client.Credentials = new System.Net.NetworkCredential("myusername", "mypassword");
MailMessage message = new MailMessage("myfromaddress", "mytoaddress");
client.Send(message);

答案 1 :(得分:2)

试试这段代码..为我工作

            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);

答案 2 :(得分:0)

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