programing

쿠키 존재 여부 확인

newsource 2023. 6. 14. 21:52

쿠키 존재 여부 확인

스택 오버플로에 대한 빠른 검색에서 쿠키가 존재하는지 확인하는 다음 방법을 제안하는 사람들을 보았습니다.

HttpContext.Current.Response.Cookies["cookie_name"] != null

또는 (예:Page클래스):

this.Response.Cookies["cookie_name"] != null

그러나 인덱서(또는 쿠키)를 사용하려고 할 때.Get method) 존재하지 않는 쿠키를 검색하는 것은 실제로 해당 이름을 가진 '기본' 쿠키를 만들고 반환하는 것처럼 보이기 때문에 내가 어떤 쿠키 이름을 사용하든 null을 반환하지 않습니다. (더욱 나쁘게도 - 원하지 않는 쿠키를 만듭니다.)

제가 여기서 뭔가 잘못하고 있는 건가요, 아니면 단순히 이름으로 특정 쿠키의 존재를 확인하는 다른 방법이 있나요?

응답에 쿠키가 있는지 확인해야 하는 경우도 있습니다.그런 다음 쿠키 키가 있는지 확인할 수 있습니다.

HttpContext.Current.Response.Cookies.AllKeys.Contains("myCookie")

자세한 내용은 여기에서 확인할 수 있습니다.

제 경우 Global.asax의 Application_EndRequest 메서드에서 Response Cookie를 수정해야 했습니다.쿠키가 존재하지 않으면 만지지 않습니다.

string name = "myCookie";
HttpContext context = ((HttpApplication)sender).Context;
HttpCookie cookie = null;

if (context.Response.Cookies.AllKeys.Contains(name))
{
    cookie = context.Response.Cookies[name];
}

if (cookie != null)
{
    // update response cookie
}

여기에는 여러분이 달성하고자 하는 목표에 따라 많은 정답이 있습니다. 종합적인 답변을 제공하기 위한 저의 시도는 다음과 같습니다.

둘 다Request그리고.Response포함된 개체Cookies속성, 즉HttpCookieCollection물건들.

Request.Cookies:

  • 이 컬렉션에는 클라이언트로부터 받은 쿠키가 포함되어 있습니다.
  • 이 컬렉션은 읽기 전용입니다.
  • 이 컬렉션에서 존재하지 않는 쿠키에 액세스하려고 하면 다음 메시지가 표시됩니다.null가치.

Response.Cookies:

  • 이 컬렉션에는 현재 요청 중에 서버에서 추가한 쿠키만 포함되어 있습니다.
  • 이 컬렉션은 쓰기 가능합니다.
  • 이 컬렉션에서 존재하지 않는 쿠키에 액세스하려고 하면 새 쿠키 개체가 수신됩니다. 액세스를 시도한 쿠키가 에 존재하지 않는 경우Request.Cookies수집, 그것은 추가될 것이다 (하지만 만약 그렇다면.Request.Cookies개체에 동일한 키를 가진 쿠키가 이미 포함되어 있으며, 개체의 값이 오래된 경우에도 새로 생성된 쿠키의 변경 사항을 반영하도록 업데이트되지 않습니다.Response.Cookies수집.

솔루션


클라이언트에서 쿠키가 있는지 확인하려면 다음 중 하나를 수행합니다.

  • Request.Cookies["COOKIE_KEY"] != null
  • Request.Cookies.Get("COOKIE_KEY") != null
  • Request.Cookies.AllKeys.Contains("COOKIE_KEY")

현재 요청 중에 서버에서 추가한 쿠키가 있는지 확인하려면 다음을 수행합니다.

  • Response.Cookies.AllKeys.Contains("COOKIE_KEY")(여기 참조)

다음 방법 중 하나로 현재 요청하는 동안 서버에서 추가한 쿠키를 확인하는 중...

  • Response.Cookies["COOKIE_KEY"] != null
  • Response.Cookies.Get("COOKIE_KEY") != null(여기 참조)

에됩니다.에서 쿠키가 생성됩니다.Response.Cookies수집하고 국가가 평가할 것입니다.true.

Response.Cookies에는 브라우저로 다시 전송될 쿠키가 들어 있습니다.쿠키가 존재하는지 알고 싶다면, 아마도 당신은 조사해야 할 것입니다.Request.Cookies.

어쨌든 쿠키가 존재하는지 확인하려면 확인할 수 있습니다.그러나 응답 개체에서 이 방법을 사용하고 쿠키가 존재하지 않으면 해당 쿠키가 만들어집니다.

방법(문자열)은 MSDN 참조 참조

은 야합다니해를 사용해야 .HttpContext.Current.Request.Cookies,것은 아니다.Response.Cookies.

날짜: 에됩니다.Response.Cookies.Add새로 추가된 쿠키에 대해 둘 중 하나가 동일하게 동작하는지 확인합니다.하지만 로 그나들어는쿠절키않반다습니지에 반영되지 .Response.

이 동작은 HttpResponse에 설명되어 있습니다.쿠키 속성:

HttpResponse를 사용하여 쿠키를 추가한 후쿠키 수집, 쿠키는 HttpRequest에서 즉시 사용할 수 있습니다.응답이 클라이언트로 전송되지 않은 경우에도 쿠키 수집.

public static class CookieHelper
{
    /// <summary>
    /// Checks whether a cookie exists.
    /// </summary>
    /// <param name="cookieCollection">A CookieCollection, such as Response.Cookies.</param>
    /// <param name="name">The cookie name to delete.</param>
    /// <returns>A bool indicating whether a cookie exists.</returns>
    public static bool Exists(this HttpCookieCollection cookieCollection, string name)
    {
        if (cookieCollection == null)
        {
            throw new ArgumentNullException("cookieCollection");
        }

        return cookieCollection[name] != null;
    }
}

용도:

Request.Cookies.Exists("MyCookie")

죄송합니다. 의견을 추가할 수 있는 담당자가 부족하지만 zmbq의 답변에 따르면:

쿠키가 있는지 확인하려면 쿠키를 선택합니다.가져오기(문자열). 쿠키 컬렉션은 수정되지 않습니다.

쿠키처럼 완전히 정확하지 않을 수 있습니다.Get(string)은 실제로 해당 이름의 쿠키가 존재하지 않는 경우 해당 쿠키를 만듭니다.하지만, 그가 말했듯이, 당신은 Request를 볼 필요가 있습니다.응답이 아닌 쿠키입니다.쿠키 그래서, 다음과 같은 것:

bool cookieExists = HttpContext.Current.Request.Cookies["cookie_name"] != null;

다음과 같은 작업을 수행하여 쿠키의 값을 확인할 수 있습니다.

Request.Cookies[SESSION_COOKIE_NAME].Value

언급URL : https://stackoverflow.com/questions/13058574/check-if-cookie-exists