簡體   English   中英

如何在 ASP.NET 網站上刪除 cookies

[英]How to delete cookies on an ASP.NET website

在我的網站中,當用戶單擊“注銷”按鈕時,Logout.aspx 頁面會加載代碼Session.Clear()

在 ASP.NET/C# 中,這是否清除了所有 cookies? 或者是否需要添加任何其他代碼來刪除我網站的所有 cookies?

嘗試這樣的事情:

if (Request.Cookies["userId"] != null)
{
    Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);   
}

但使用也很有意義

Session.Abandon();

除了在許多情況下。

不可以,Cookies 只能通過為它們中的每一個設置到期日期來清潔。

if (Request.Cookies["UserSettings"] != null)
{
    HttpCookie myCookie = new HttpCookie("UserSettings");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}

Session.Clear()的時刻:

  • 刪除Session集合中的所有鍵值對。 Session_End事件沒有發生。

如果您在注銷期間使用此方法,您還應該對Session_End事件使用Session.Abandon方法:

  • 帶有 Session ID 的 Cookie(如果您的應用程序將 cookies 用於 session id 存儲,默認情況下)被刪除

這就是我使用的:

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

不幸的是,對我來說,設置“過期”並不總是有效。 cookie 不受影響。

這段代碼對我有用:

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

其中"ASP.NET_SessionId"是 cookie 的名稱。 這並沒有真正刪除 cookie,而是用一個空白 cookie 覆蓋它,這對我來說已經足夠接近了。

我只想指出,正如其他人所說,使用 Session.Abandon 時不會刪除 Session ID cookie。

當您放棄 session 時,session ID cookie 不會從用戶的瀏覽器中刪除。 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. 同時,如果用戶在同一個 DNS 域中打開另一個應用程序,則在從一個應用程序調用 Abandon 方法后,用戶不會丟失其 session state。

有時,您可能不想重復使用 session ID。 如果您這樣做並且如果您了解不重用 session ID 的后果,請使用以下代碼示例放棄 session 並清除 Z21D6F40CFB511982E4424E0E250A5 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. null 值有效地從瀏覽器中清除 cookie。

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

現在是 2018 年,所以在 ASP.NET 內核中,function 內置了一個直截了當的內容。 要刪除 cookie,請嘗試以下代碼:

if(Request.Cookies["aa"] != null)
{
    Response.Cookies.Delete("aa");
}
return View();

您永遠不應將密碼存儲為 cookie。 要刪除 cookie,您實際上只需要修改並使其過期。 您不能真正刪除它,即將它從用戶的磁盤中刪除。

這是一個示例:

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
    }

以 OP 的問題標題為刪除所有 cookies -“在網站中刪除 Cookies”

我在某處的 web 上遇到了 Dave Domagala 的代碼。 我編輯了 Dave 以允許 Google Analytics cookies 也允許 - 它遍歷網站上找到的所有 cookies 並將它們全部刪除。 (從開發人員的角度 - 將新代碼更新到現有站點中,是避免用戶重新訪問該站點時出現問題的一個很好的方法)。

我使用下面的代碼與首先讀取 cookies 一起使用,保存任何所需的數據 - 然后在用下面的循環清洗所有東西后重置 cookies。

編碼:

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.
}

補充:如果你使用谷歌分析

上述循環/刪除將刪除該站點的所有 cookies,因此,如果您使用 Google Analytics - 保留 __utmz cookie 可能會很有用,因為該 cookie 會跟蹤訪問者來自何處、使用了什么搜索引擎、什么點擊了鏈接,使用了什么關鍵字,以及訪問您的網站時它們在世界上的哪個位置。

因此,為了保留它,一旦知道 cookie 名稱,就包裝一個簡單的 if 語句:

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

雖然這是一個舊線程,但我想如果有人仍在尋找未來的解決方案。

HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);

這就是我的訣竅。

Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)

您必須設置過期日期才能刪除 cookies

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

如果 cookie 不存在,這不會引發異常。

如果有人喜歡,我強烈推薦這個。

string COOKIE_NAME = "COOCKIE NAME"

if (HttpContext.Request.Cookies.AllKeys.Contains(COOKIE_NAME))
        {
            HttpCookie Cookie = HttpContext.Request.Cookies[COOKIE_NAME];
            engagementIdCookie.Expires = DateTime.Now.AddDays(-1);
            Response.Cookies.Add(Cookie);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM