How to delete cookies on an ASP.NET website

后端 未结 11 1921
傲寒
傲寒 2020-11-30 05:07

In my website when the user clicks on the \"Logout\" button, the Logout.aspx page loads with code Session.Clear().

In ASP.NET/C#, does this clear all co

相关标签:
11条回答
  • 2020-11-30 05:47

    You should never store password as a cookie. To delete a cookie, you really just need to modify and expire it. You can't really delete it, ie, remove it from the user's disk.

    Here is a sample:

    HttpCookie aCookie;
        string cookieName;
        int limit = Request.Cookies.Count;
        for (int i=0; i<limit; i++)
        {
            cookieName = Request.Cookies[i].Name;
            aCookie = new HttpCookie(cookieName);
            aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday
            Response.Cookies.Add(aCookie); // overwrite it
        }
    
    0 讨论(0)
  • 2020-11-30 05:49

    You have to set the expiration date to delete cookies

    Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));
    

    This won't throw an exception if the cookie doesn't exist.

    0 讨论(0)
  • 2020-11-30 05:50

    It is 2018 now, so in ASP.NET Core, there is a straight forward built in function. To delete a cookie try this code:

    if(Request.Cookies["aa"] != null)
    {
        Response.Cookies.Delete("aa");
    }
    return View();
    
    0 讨论(0)
  • 2020-11-30 05:54

    This is what I use:

        private void ExpireAllCookies()
        {
            if (HttpContext.Current != null)
            {
                int cookieCount = HttpContext.Current.Request.Cookies.Count;
                for (var i = 0; i < cookieCount; i++)
                {
                    var cookie = HttpContext.Current.Request.Cookies[i];
                    if (cookie != null)
                    {
                        var expiredCookie = new HttpCookie(cookie.Name) {
                            Expires = DateTime.Now.AddDays(-1),
                            Domain = cookie.Domain
                        };
                        HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
                    }
                }
    
                // clear cookies server side
                HttpContext.Current.Request.Cookies.Clear();
            }
        }
    
    0 讨论(0)
  • 2020-11-30 05:55

    I just want to point out that the Session ID cookie is not removed when using Session.Abandon as others said.

    When you abandon a session, the session ID cookie is not removed from the browser of the user. Therefore, as soon as the session has been abandoned, any new requests to the same application will use the same session ID but will have a new session state instance. At the same time, if the user opens another application within the same DNS domain, the user will not lose their session state after the Abandon method is called from one application.

    Sometimes, you may not want to reuse the session ID. If you do and if you understand the ramifications of not reusing the session ID, use the following code example to abandon a session and to clear the session ID cookie:

    Session.Abandon();
    Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
    

    This code example clears the session state from the server and sets the session state cookie to null. The null value effectively clears the cookie from the browser.

    http://support.microsoft.com/kb/899918

    0 讨论(0)
  • 2020-11-30 05:56

    Taking the OP's Question title as deleting all cookies - "Delete Cookies in website"

    I came across code from Dave Domagala on the web somewhere. I edited Dave's to allow for Google Analytics cookies too - which looped through all cookies found on the website and deleted them all. (From a developer angle - updating new code into an existing site, is a nice touch to avoid problems with users revisiting the site).

    I use the below code in tandem with reading the cookies first, holding any required data - then resetting the cookies after washing everything clean with the below loop.

    The code:

    int limit = Request.Cookies.Count; //Get the number of cookies and 
                                       //use that as the limit.
    HttpCookie aCookie;   //Instantiate a cookie placeholder
    string cookieName;   
    
    //Loop through the cookies
    for(int i = 0; i < limit; i++)
    {
     cookieName = Request.Cookies[i].Name;    //get the name of the current cookie
     aCookie = new HttpCookie(cookieName);    //create a new cookie with the same
                                              // name as the one you're deleting
     aCookie.Value = "";    //set a blank value to the cookie 
     aCookie.Expires = DateTime.Now.AddDays(-1);    //Setting the expiration date
                                                    //in the past deletes the cookie
    
     Response.Cookies.Add(aCookie);    //Set the cookie to delete it.
    }
    

    Addition: If You Use Google Analytics

    The above loop/delete will delete ALL cookies for the site, so if you use Google Analytics - it would probably be useful to hold onto the __utmz cookie as this one keeps track of where the visitor came from, what search engine was used, what link was clicked on, what keyword was used, and where they were in the world when your website was accessed.

    So to keep it, wrap a simple if statement once the cookie name is known:

    ... 
    aCookie = new HttpCookie(cookieName);    
    if (aCookie.Name != "__utmz")
    {
        aCookie.Value = "";    //set a blank value to the cookie 
        aCookie.Expires = DateTime.Now.AddDays(-1);   
    
        HttpContext.Current.Response.Cookies.Add(aCookie);    
    }
    
    0 讨论(0)
提交回复
热议问题