ASP.NET 웹 사이트에서 쿠키를 삭제하는 방법


87

내 웹 사이트에서 사용자가 "로그 아웃"버튼을 클릭하면 Logout.aspx 페이지가 코드와 함께로드됩니다 Session.Clear().

ASP.NET/C#에서 모든 쿠키가 지워 집니까? 아니면 내 웹 사이트의 모든 쿠키를 제거하기 위해 추가해야하는 다른 코드가 있습니까?

답변:


149

다음과 같이 시도하십시오.

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

그러나 사용하는 것도 의미가 있습니다.

Session.Abandon();

많은 시나리오 외에도.


15
Session.AbandonASP.NET 세션 쿠키는 지워지지 만 여기서 userID처럼 수동으로 설정 한 쿠키는 지워지지 않습니다. 그리고 Cookies["whatever"]결코 null이 아닙니다. 존재하지 않는 쿠키를 요청하면 프레임 워크가 쿠키를 생성합니다.
Andomar 2011

11
@Andomar Cookies["whatever"]는 쿠키가 존재하지 않을 때 실제로 null을 반환합니다! 나는 이것이 오래된 주석이라는 것을 알고 있지만 다른 독자 들이이 주석으로 오도되는 것을 원하지 않습니다.
Nuno Agapito 2014 년

6
그것은 또한 매우 중요합니다 Expires으로 설정되지 않습니다 DateTime.MinValue이 실제로 쿠키에게이 브라우저 / 탭 (브라우저에 의존)가 쿠키를 삭제하기 전에 종료 될 때까지 기다립니다 의미 세션 만료를 줄 것이다있다.
Nashenas

7
@NunoAgapito 매우 오래되었지만 다른 사용자의 경우 Cookies [ "whatever"]는 "Request"에서 읽으면 null을 반환하고 "Response"에서 읽으면 빈 쿠키를 반환합니다.
Athiwat Chunlakhan

그러나 이것은 단지 쿠키의 내용이 쿠키는 여전히 나를 위해 적어도 브라우저에 남아 제거
Beingnin

50

아니요, 쿠키는 각각의 만료 날짜설정 해야만 정리할 수 있습니다 .

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.Abandon방법을 사용하는 Session_End경우 이벤트에 대한 방법 도 사용해야합니다 .

  • 세션 ID가있는 쿠키 (애플리케이션에서 기본적으로 세션 ID 저장소에 쿠키를 사용하는 경우)가 삭제됩니다.

만료일에 관해서는 맞지만 if실제로 라인이 작동하지 않는다고 생각합니다 . Cookies["whatever"]프레임 워크를 사용하여 쿠키 를 요청할 때 쿠키가 없으면 쿠키가 생성됩니다.
Andomar 2011-07-09

@Andomar MSDN에서 얻은 코드입니다. Request객체 를 호출하면 쿠키가 생성되지 않을 것이라고 생각 합니다.
VMAtm 2011

2
아하, Response객체에 대한 쿠키 만 생성하는 것 같습니다 . 흥미로운 :)
Andomar 2011-07-09

3
이 코드는 한 줄로만 최적화 할 수 있습니다 Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1). 여기서 서버는 브라우저에 쿠키 제거를 요청합니다. 존재하는 경우 브라우저에서 제거합니다.
shashwat

2
예, 저는 Response.Cookies.Add (myCookie) 부분이 필요했습니다-그것 없이는 항상 / 올바르게 작동하지 않습니다. 감사.
크리스토퍼 D. 에머슨

28

이것이 내가 사용하는 것입니다.

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

정말 고마워! 또한 내 문제를 제거있어 그 쿠키 것없는 업데이트 서버 사이드
톰 엘 Safadi

11

안타깝게도 "만료"설정이 항상 작동하는 것은 아닙니다. 쿠키는 영향을받지 않았습니다.

이 코드는 저에게 효과적이었습니다.

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

"ASP.NET_SessionId"쿠키의 이름은 어디에 있습니까 ? 이것은 실제로 쿠키를 삭제하지는 않지만 나에게 충분히 가까운 빈 쿠키로 덮어 씁니다.


5

다른 사람들이 말했듯이 Session.Abandon을 사용할 때 세션 ID 쿠키가 제거되지 않는다는 점을 지적하고 싶습니다.

세션을 중단해도 세션 ID 쿠키는 사용자의 브라우저에서 제거되지 않습니다. 따라서 세션이 중단되는 즉시 동일한 애플리케이션에 대한 모든 새 요청은 동일한 세션 ID를 사용하지만 새 세션 상태 인스턴스를 갖게됩니다. 동시에 사용자가 동일한 DNS 도메인 내에서 다른 응용 프로그램을 열면 한 응용 프로그램에서 Abandon 메서드가 호출 된 후에도 사용자의 세션 상태가 손실되지 않습니다.

때로는 세션 ID를 재사용하고 싶지 않을 수 있습니다. 세션 ID를 재사용하지 않는 결과를 이해하고 있다면 다음 코드 예제를 사용하여 세션을 중단하고 세션 ID 쿠키를 지우십시오.

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

이 코드 예제는 서버에서 세션 상태를 지우고 세션 상태 쿠키를 null로 설정합니다. null 값은 브라우저에서 쿠키를 효과적으로 지 웁니다.

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


5

이제 2018 년이되었으므로 ASP.NET Core에는 간단한 기본 제공 기능이 있습니다. 쿠키를 삭제하려면 다음 코드를 시도하십시오.

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

4

비밀번호를 쿠키로 저장해서는 안됩니다. 쿠키를 삭제하려면 쿠키를 수정하고 만료하기 만하면됩니다. 실제로 삭제할 수는 없습니다. 즉, 사용자 디스크에서 제거 할 수 없습니다.

다음은 샘플입니다.

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
    }

2

OP의 질문 제목을 모든 쿠키 삭제로 간주- "웹 사이트에서 쿠키 삭제"

웹 어딘가에서 Dave Domagala의 코드를 발견했습니다. Google Analytics 쿠키도 허용하도록 Dave를 수정했습니다. 웹 사이트에있는 모든 쿠키를 반복하고 모두 삭제했습니다. (개발자 관점에서-새 코드를 기존 사이트로 업데이트하는 것은 사용자가 사이트를 다시 방문하는 문제를 방지하는 좋은 방법입니다.)

먼저 쿠키를 읽고 필요한 데이터를 보유한 다음 아래 루프로 모든 것을 깨끗이 씻은 후 쿠키를 재설정하는 것과 함께 아래 코드를 사용합니다.

코드:

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

추가 : Google Analytics를 사용하는 경우

위의 루프 / 삭제는 사이트의 모든 쿠키를 삭제하므로 Google Analytics를 사용하는 경우 __utmz 쿠키를 유지하는 것이 유용 할 것입니다.이 쿠키는 방문자가 어디에서 왔는지, 어떤 검색 엔진이 사용되었는지, 무엇을 추적하는지 추적하기 때문입니다. 링크 클릭, 사용 된 키워드, 웹 사이트에 액세스했을 때 전 세계 어디에 있었는지.

따라서이를 유지하려면 쿠키 이름이 알려지면 간단한 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);    
}

1

이것은 오래된 스레드이지만 누군가가 앞으로도 여전히 해결책을 찾고 있다면 생각했습니다.

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

그것이 나를 위해 트릭을 한 것입니다.



0

쿠키를 삭제하려면 만료일을 설정해야합니다.

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

쿠키가 존재하지 않으면 예외가 발생하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.