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

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

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



답변

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

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

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

Session.Abandon();

많은 시나리오 외에도.


답변

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

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 저장소에 쿠키를 사용하는 경우)가 삭제됩니다.


답변

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

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


답변

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

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

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

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


답변

다른 사람들이 말했듯이 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


답변

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

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


답변

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

다음은 샘플입니다.

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
    }