2009-03-14 3 views
1

다음 코드를 호출합니다.클리어 쿠키가 작동하지 않습니까? 만료 날짜 설정 방법

protected void SetCookieValue(
    string sCookieName, object oValue, DateTime dtExpires) 
{ 
    Response.Cookies[sCookieName].Value = Utility.ToStringValue(oValue); 
    Response.Cookies[sCookieName].Expires = dtExpires; 
    Response.Cookies.Add(Response.Cookies[sCookieName]); 
} 

날짜를 30 일로 설정하십시오.

SetCookieValue(sCookieName, null, DateTime.Now.AddDays(-30.0)); 

쿠키가 만료되도록하려면. 그것은 내 dev에 상자 (윈도우 7, IIS7)에서 일하고있어,하지만 IIS6에서 지금 실패. 이 코드를 변경하지 않았지만 현재 1 년 넘게 작동하는 것으로 보였지만 제작 사이트에서는이 쿠키를 지울 수 없습니다.

compat 모드에서 IE8의 브라우저 (dev 및 생산 타격 용)

모든 아이디어?


올바른 방향으로 움직여 주셔서 감사 드리며 다음과 같이 마무리되었습니다 :

protected void SetCookieValue(
     string cookieName, object value, DateTime expireDate) 
{ 
    HttpCookie cookie = new HttpCookie(cookieName); 
    cookie.Value = Utility.ToStringValue(value); 
    cookie.Expires = expireDate; 

    if (Request.Cookies[cookieName] != null) 
    { 
     Response.SetCookie(cookie); 
    } 
    else 
    { 
     Response.Cookies.Add(cookie); 
    } 
} 
그래서 쿠키를 죽일 때이 메서드는 이름, null 값 및 DateTime.MinValue 만료 날짜를 사용하여 호출합니다. 쿠키가 있으면 업데이트되고 그렇지 않으면 만료 날짜가 추가됩니다.

같은 기능을 사용하여 쿠키를 만들거나 죽이기 때문에 자체 DeleteCookie 메서드를 사용하지 않으려 고했습니다. 쿠키를 완전히 새로 바꿔 이름을 바꿨습니다. 약간의 사용자 푸시 백이 발생할 수 있습니다. 하지만 아! :)

고마워! 대답은 올바른 방향으로 나를 설득 한 사람으로 표시됩니다.

+0

내가의 두 부분을 생각하지 마십시오/다른 기능적으로 달라진 경우. 둘 다 응답을 통해 쿠키를 브라우저로 다시 보냅니다. – dustyburwell

답변

6

당신은 Request.Cookies에서 쿠키를 검색 한 다음 Response.Cookies에 만료 된 쿠키를 추가해야합니다 :

public void DeleteCookie(string cookieName) 
{ 
    if (Request.Cookies[cookieName] != null) 
    { 
     HttpCookie myCookie = new HttpCookie(cookieName); 
     myCookie.Expires = DateTime.Now.AddDays(-1d); 
     Response.Cookies.Add(myCookie); 
    } 
} 
+0

Request.Cookies [cookieName] == null 인 경우에는 안됩니까? – klkitchens

+0

아니요, 쿠키가 없으면 쿠키를 삭제할 필요가 없습니다. ;) –

+0

내 최종 결과는 위입니다. 뉘앙스 주셔서 감사. – klkitchens

1

나는 더 asp.net 전문가는 아니지만, 모든 코드와 함께 주위를 연주하지 않고, 나에게 이상한 보이는 유일한 것은 당신이 전화하고 있다는 것입니다 :

Response.Cookies.Add(Response.Cookies[sCookieName]); 

이미

를 호출 한 후
Response.Cookies[sCookieName].Value = Utility.ToStringValue(oValue); 
Response.Cookies[sCookieName].Expires = dtExpires; 

이것은 내게 쓸데없는 것처럼 보이며 이상한 행동을 유발할 수 있습니다. 그리고 제한된 경험으로 처음 두 라인이 정말로 필요한 것입니다.

다른 옵션은 IE8이 아직 시험판에있는 것처럼 보이기 때문에 쿠키 처리에 몇 가지 문제가있을 수 있습니다. 다른 브라우저로 시도해보고 여전히 동일한 결과가 표시되는지 확인하십시오.

+0

앞으로 1/2 걸음 앞서 나가십시오. Firefox 3에서 시도했는데 쿠키가 제대로 작동하지 않습니다. 해당 줄을 제거하려고 시도하지만 IE8 문제 (아마도)를 완화하십시오. – klkitchens