소년포비의 세계정복!!

ASP.NET에서 다중쿠키 수정시 주의점 본문

프로그램 세상/ASP.NET

ASP.NET에서 다중쿠키 수정시 주의점

소년포비 2009. 10. 6. 06:35

 
1. 서론
 
대부분의 브라우저에서는 한 도메인당 사용할 수 있는 쿠키명의 개수가 20개로 제한되어 있기 때문에
부득이하게 많은 개수의 쿠키명을 사용할 수 밖에 없는 경우라면 다중 쿠키를 사용하는 것도 한 방법이 될 수 있다.
 
다중 쿠키를 사용하는 경우, ASP와 ASP.NET에서 다중 쿠키를 다루는 방법이 다소 차이가 있어
이에 대해 정리하고자 한다.
 
일반적으로 ASP에서의 다중 쿠키 사용은 다음과 같다
 
[쿠키 입력]
Response.Cookies("쿠키명").Domain = "mkex.pe.kr"
Response.Cookies("쿠키명")("하위키1") = "값1"
Response.Cookies("쿠키명")("하위키2") = "값2"
 
[쿠키 읽기]
Response.Write(Request.Cookies("쿠키명")("하위키1"))
Response.Write(Request.Cookies("쿠키명")("하위키2"))
 
다중 쿠키로 쿠키 값을 입력하는 경우 헤더에는 다음과 같이 쿠키 정보가 기록된다.
 
Cookie Header : 쿠키명=하위키1=값1&하위키2=값2;...
 
ASP.NET에서도 이와 같은 방식으로 쿠키를 다룰 수 있다.
 
[쿠키 입력]
Response.Cookies["쿠키명"].Domain = "mkex.pe.kr";
Response.Cookies["쿠키명"]["하위키1"] = "값1";
Response.Cookies["쿠키명"]["하위키2"] = "값2";
 
[쿠키 읽기]
Response.Write(Request.Cookies["쿠키명"]["하위키1"]);
Response.Write(Request.Cookies["쿠키명"]["하위키2"]);
 
 
 
2. 문제상황
 
하지만, 다중 쿠키에서 하나의 하위키에 대한 값을 수정하려고 한다면 ASP와 ASP.NET에서 차이점이 발생하게 된다.
 
ASP에서는 다음과 같은 방식으로 간단하게 하위키에 해당하는 값을 수정할 수 있다.
 
Response.Cookies("쿠키명")("하위키1") = "변경된값"
Cookie Header : 쿠키명=하위키1=변경된값&하위키2=값2;...
 
ASP.NET에서 위와 같은 방식으로 수정하고자 하면 다음과 같은 결과가 나타난다.
 
Response.Cookies["쿠키명"]["하위키1"] = "변경된값";
Cookie Header : 쿠키명=하위키1=변경된값;...     //하위키2와 관련된 쿠키 정보 사라짐
 
 
 
기존의 쿠키명에 해당하는 다른 하위키에 대한 쿠키 값이 모두 없어지게 된다.
ASP.NET에서는 쿠키를 NameValueCollection으로 관리하기 때문에 ASP와 같은 형식으로 쿠키를 수정하려고 하면
해당 Collection이 초기화 되어 재설정되기 때문에 기존 설정된 쿠키가 사라지게 되는 것이다.
 
 
3. 해결 방안
 
 
ASP.NET에서는 다음과 같은 방식으로 하위키의 값을 변경하여야 한다.
 
HttpCookie cookie = Request.Cookies["쿠키명"];  //가져올 쿠키명에 해당하는 쿠키 객체를 가져온다.
cookie.Domain = "mkex.pe.kr";
cookie.Values.Set("하위키1","변경된값");               //쿠키 객체의 Collection의 Set 메서드를 이용하여 하위키 값을 변경한다.
Response.Cookies.Set(cookie);                           //변경된 쿠키 객체를 다시 Response Cookie Collection에 설정한다.
 
Cookie Header : 쿠키명=하위키1=변경된값&하위키2=값2;...