ASP.NET 의 Response.Cookies.Remove 에서 COOKIE 를 삭제 할 수 없 는 이유

2856 단어 Remove삭제COOKIE
예 는 다음 과 같다.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        HttpCookie UserInfo = new HttpCookie("UserInfo");
        UserInfo.Value = "bdstjk";
        Response.Cookies.Add(UserInfo);
    }

}

protected void btnRemoveCookie_Click(object sender, EventArgs e)
{
    Response.Cookies.Remove("UserInfo");
    Response.Write("<script type=\"text/javascript\">alert(\" Cookie !\");</script>");
}

protected void btnCheckCookie_Click(object sender, EventArgs e)
{
    if (Request.Cookies["UserInfo"] != null)
    {
        Response.Write("Cookie ,"+Request.Cookies["UserInfo"].Value);
    }
    else
    {
        Response.Write("Cookie ");
    }
}
 

페이지 코드:

<asp:Button ID="btnRemoveCookie" runat="server" Text=" Cookie"
             />
<asp:Button ID="btnCheckCookie" runat="server" Text=" Cookie"
             />
코드 테스트 를 실행 하면 삭제 단 추 를 누 르 면 쿠키 가 존재 하 는 것 을 발견 할 수 있다.다음 그림:
 
왜 그 럴 까요?분명히 쿠키 를 삭제 하 는 작업 을 실 행 했 는데 왜 지우 지 못 합 니까?.NET 의 HttpCookieCollection 구현 소스 코드

public void Remove(string name)
{
    if (this._response != null)
    {
        this._response.BeforeCookieCollectionChange();
    }
    this.RemoveCookie(name);
    if (this._response != null)
    {
        this._response.OnCookieCollectionChange();
    }
}
를 살 펴 보 겠 습 니 다.이 동작 은 HttpCookieCollection 이라는 집합 에서 쿠키 를 삭 제 했 습 니 다.서버 가 클 라 이언 트 에 데 이 터 를 전송 할 때 서버 에서 삭 제 된 Cookie 의 어떠한 메시지 도 포함 하지 않 습 니 다.브 라 우 저 는 이 를 변경 하지 않 습 니 다.그래서 쿠키 가 삭제 되 지 않 는 경우 가 발생 합 니 다.그러면 저희 가 쿠키 를 삭제 하려 면 어떻게 해 야 하나 요?쿠키 를 삭제 하 는 코드 를 다음 문장 으로 변경 합 니 다.

if (Request.Cookies["UserInfo"] != null)
{
    Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
}
Response.Write("<script type=\"text/javascript\">alert(\" Cookie !\");</script>");
프로그램 을 다시 실행 합 니 다.테스트:됐 습 니 다.쿠키 가 삭제 되 었 습 니 다.쿠키 의 만 료 시간 을 마이너스 로 설정 함으로써 쿠키 의 만 료 를 강제 합 니 다.우리 가 원 하 는 효 과 를 거 둘 수 있 을 거 야.Response.Cookies.Remove 는 우리 가 필요 로 하 는 효 과 를 실현 할 방법 이 없 는데 왜 마이크로소프트 가 남아 있 습 니까?CookieCollection 이 ICollection 인 터 페 이 스 를 실현 하기 때문에 romove 는 반드시 실현 해 야 하 는 방법 입 니 다.비록 그것 은 큰 실제 가치 가 없 지만.그리고 집합 한 romove 도 이런 실현 방식 이 어야 한다.다만 마이크로소프트 가 MSDN 을 쓸 때 너무 잘 묘사 하지 못 해서 우리 에 게 적지 않 은 번 거 로 움 을 주 었 다.

좋은 웹페이지 즐겨찾기