쿠키 존재 여부 확인
스택 오버플로에 대한 빠른 검색에서 쿠키가 존재하는지 확인하는 다음 방법을 제안하는 사람들을 보았습니다.
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
'programing' 카테고리의 다른 글
드롭다운 목록에 값이 있는지 확인하는 가장 좋은 방법은 무엇입니까? (0) | 2023.06.14 |
---|---|
web.config>config>config>runtime>assemblyBinding에서 생성된 항목의 의미/이유는 무엇입니까? (0) | 2023.06.14 |
C/C++에서 "\"?가 이스케이프 시퀀스인 이유는 무엇입니까? (0) | 2023.06.14 |
두 개의 RMarkdown(.Rmd) 파일을 단일 출력으로 결합하는 방법은 무엇입니까? (0) | 2023.06.14 |
C/C++ 라이브러리를 여러 클라이언트 언어로 사용할 수 있도록 설계하는 방법은 무엇입니까? (0) | 2023.06.14 |