반응형

Cookie vs Session

 

 

Cookie 는 Client, PC 에서 운용되고 Session 은 서버에서 운용 된다. 적절히 조율 하여 최적 설계하는게 좋은데 의외로 MS 버그인지 생각되로 잘되질 않는다, 한글 처리와 삭제 ..

 

 

Web.config

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <globalization 
       requestEncoding="ks_c_5601-1987" 
       responseEncoding="ks_c_5601-1987" 
    />
 </system.web>

</configuration>

 

// 이쁘게 구성 할때 선언

using System.Collections.Specialized;

 

// 자주 쓰이는 Class 와 멤버

HttpCookieCollection MyCookieColl = Request.Cookies;
HttpCookie MyCookie = MyCookieColl["USER"];
String[] arr1 = MyCookieColl.AllKeys;

NameValueCollection Nvc = Request.Cookies["USER"].Values;
 

// 한항목에 서너개 변수를 줄때 Name "USER" 서버 항목 생일(BDAY),성(SEX),이름(NAME),등록일

    MyCookie.Values["BDAY"] = "20001010";
    MyCookie.Values["SEX"]  = HttpUtility.UrlEncode("남");
    MyCookie.Values["NAME"] = HttpUtility.UrlEncode("홍길동");
    MyCookie.Values["DATE"] = DateTime.Now.ToString("u");

혹은

    MyCookie.Values.Add("BDAY","20001010");
    MyCookie.Values.Add("SEX", HttpUtility.UrlEncode("남"));
    MyCookie.Values.Add("NAME", HttpUtility.UrlEncode("홍길동"));
    MyCookie.Values.Add("DATE", DateTime.Now.ToString("u"));

 

실제 기억될떄는 각각 항목을 가지지 않고 구분자(&)로 한 항목에 다 들어 간다

 

BDAY=20001010&SEX=남&NAME=홍길동&DATE=20101010 153024

 

MyCookie.Value 는 구분자 포함한 전체 문장을 가져 오고

MyCookie.Values["BDAY"] 는 생일(20001010) 만 가져 온다 

MyCookie["BDAY"] 도 같은것으로 생일(20001010) 만 가져 온다

 

 

Cookie 삭제

 

private void Cookie_Delete()
{
   HttpCookie aCookie;
   string cookieName;
   int limit = Request.Cookies.Count;


   for (int i = 0; i < limit; i++)
   {
    cookieName = Request.Cookies[i].Name;
    aCookie = new HttpCookie(cookieName);
    aCookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(aCookie);
   }
}

 

삭제에 Add 함수라 상식을 초월하는데 Add시 기존 자료를 삭제하고 들어간다는 의미인듯

 

 

 

 

 http://blog.naver.com/icehuk/50027337179  2008/01/30 09:01

 


한글 쿠키 깨짐

 

A와 B사이트가 있습니다.
iis 밑 web.config 환경 똑같구요...
Form인증을 사용합니다.
인증처리는 아래와 같이 했습니다.
FormsAuthentication.SetAuthCookie(ID, false, "/");
   
   HttpCookie Cookie;
   string Name = ci.Name.Trim();
   Cookie = new HttpCookie("Name", Name);
   Cookie.Path = "/";
   Response.Cookie!s.Add(Cookie);


 

똑같은 환경인데.. A라는 사이트는 한글 쿠키가 이상없이 사용이되고.. B라는 사이트는 한글이 깨지네요


동시에 한글을 쿠키값이 들어가면. Form인증 또한 영향을 가서..  
Response.Write(Page.User.Identity.IsAuthenticated + "<br>"); 라고 찍으면 값이 "false"가 나옵니다.


쿠키값을 출력하면
"?좊??? .AuthCIC=C7D27C82206120830DEDE2F490B69.......A"
이렇게 출력됩니다.


흠..여기서 심사장님이 HttpUtility.UrlDecode 사용해보라고 하셨는데.. 역쉬나 깨지더군요...


 

근데 쿠키 적용시 HttpUtility.UrlEncode를 사용해서 저장하면 
인증도. 쿠키도 깔끔하게 출력이 되네요...ㅠ,ㅠ...

 

아래와 같이 말이죠

쿠키값 저장시
string Name = HttpUtility.UrlEncode(ci.Name.Trim());
Cookie = new HttpCookie("Name", Name);

쿠키값 사용시
string temp =  (Request.Cookie!s["Name"] == null) ? "" :HttpUtility.UrlDecode(Request.Cookie!s["Name"].Value.ToString());

 

이것때문에 어제 하루 날려버리고..--;;;.. 이번에도 심사장님에 도움으로 해결 합니다. ㅋㅋㅋㅋ
근데 이걸 MS버그라고 해야 하나요??? 아니면... 프로토콜때문에 생기는 문제라고 해야 하나요??
흠 어렵네.. 쩝...
 
출처  : http://sindream.tistory.com/entry/한글-쿠키-깨짐

 

 

 

 

http://blog.naver.com/tjdjd/90041950196   2009/02/08 20:10

 


[ASP] 쿠기 사용하기

 


웹에서 서버가 클라이언트 브라우저에 작은 텍스트 파일을 저장할 수 있는데 이 파일을 "쿠키" 라고 한다.
쿠키에는 사용자의 ID,Passwd 등의 정보를 저장해 두었다가 서버에 연결할 때 쿠키를 이용하여 사용자를 파악할 수 있다.

 

***************************************
- 쿠키에 저장할 때 : Response 객체
- 쿠키의 값을 읽어올때 : Request 객체
EX) 
→ Response.cookies(“user”) = “nhs”
→ Request.cookies(“user”)
***************************************

 

형식 : Request.Cookies(쿠키변수)[(하위쿠기변수)|.속성]
 
<html>
<head><title> Cookie 컬렉션 </title></head>
<body>
<p>
<h3> Cookie 컬렉션을 출력 </h3>
<%
       Response.Cookies("myname") = “홍길동”  ' 홍길동이라고 텍스트파일에 저장한다.
       Response.write     Request.Cookies(“myname”)  '홍길동이라고 저장된 데이타를 읽어온다.
%>
</body>
</html>
 
-----------------------------------------------------------------------------------
(보충) 하위쿠키예제
- "myinfo"라는 쿠키의 모든 하위 쿠키를 출력하는 예제 : for 문의 사용법을 눈여겨 봐둔다.
<html>
<head><title> Cookie 컬렉션 </title></head>
<body>
<p>
<h3> Cookie 컬렉션을 출력 </h3>
<%
       Response.Cookies(“myinfo”)(“name”) = “홍길동”
       Response.Cookies(“myinfo”)(“age”) = “20”
       Response.Cookies(“myinfo”)("tel”) = “02-555-6666”
 
'쿠기를 2009년 01월27일까지 유지하되 날짜가 지나면 쿠키를 삭제하라는 것이다.
'즉 지정해준 날짜가 지나면 쿠기는 삭제된다는 것이다.
Response.Cookies(“myInfo”).Expires = #27/01/2009 00:00:00# 
 
'쿠기를 읽어와서 화면에 출력한다.
Response.write Request.Cookies(“myInfo”)
 
'strkey 라는 변수에 값을 담아서 myinfo에 있는 모든 값을 돌려준다.
'즉 순서대로 돌려주기 때문에 처음에 name 그다음 age 그다음 tel 값을 돌려준다.
       For each strkey in Request.Cookies(“myinfo”)                
               Response.write       Request.Cookies(“myinfo”)(strkey) & “<br>”
       next
%>
</body>
</html>
-----------------------------------------------------------------------------------

 

 

네이버 지식iN

 

쿠키가 아닌 Session의 경우 서브 도메인간 공유가 가능한지 궁굼해서 질문 올립니다.
얼핏 생각해보면 Session정보는 서버에 저장하기 때문에 서브 도메인으로 들어가면 다른 서버로 인식을 해서 SessionID를 다른 것을 받고 있는 것 같은데요.
같은 서버에서의 서브 도메인이라면 혹시 가능 하지 않을까 싶어서 질문 올립니다.
참고 - 검색해보니 P3P규약이라는 것이 있는데 쿠키만 되는 것인지 사용을 잘못한 것인지 잘 되지 않는 상태입니다.

 

----------------------------------

 

이부분은 쿠키로 하지 않고는 풀기 힘듭니다.
브라우저 창을 새로 열때마다 새로운 세션을 부여받기 때문에 쿠키가 아니고선 페이징을 여러번 처리해야 합니다.
 
1. 로그인을 했을 때나 웹페이지를 열 때 다른 서브 도메인까지 열도록 하는 방법
2. 세션 값을 쿠키에 저장하는 방법
 
1.번은 뭐 잘 아시리라...<iframe> 쓰시면 되구요.
2.번은 현재 제가 쓰는겁니다.


using System.Collections.Specialized;
 
Dim iSessionID


IF Request.Cookies("SSID") = "" THEN
    Response.Cookies("SSID").domain  = Request.ServerVariables["SERVER_NAME"]
    Response.Cookies("SSID").path    = "/"
    Response.Cookies("SSID")         = Session.SessionID
    iSessionID = Request.Cookies("SSID")
ELSE
    iSessionID = Request.Cookies("SSID")
END IF

 

 

 

 

http://blog.naver.com/artfile/130092855606 2010/08/27 20:02
  
//오늘 본 상품목록의 쿠키저장할부분
//Response.Cookies["userInfo"]["userName"] = "patrick";
//Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();
//Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);--> -1로하면 쿠키삭제

 

Response.Cookies["TodayPD"][PD_Idx] = PD_Idx;
Response.Cookies["TodayPD"][PD_Thum_img] = 
"/Admin/Products/Images/" + PD_Thum_img.ToString();

 

우선 쿠키를 생성하는 페이지부터 보자, ["TodayPD"] 라는 컬렉션에 담는 형식의 [] 배열구조로 저장한다. 이는 향후에 따로따로 값을 받아오는 불편함을 없애기 위함이다.
 
그리고 ASP.NET에서 어떤 값을 설정할 때는 Response를 사용함을 상기하자.
 
if (Request.Cookies["TodayPD"] != null)
{
     NameValueCollection nvc = Request.Cookies["TodayPD"].Values;

     int PDCount = nvc.Count;
     for (int i = 0; i < PDCount; i++)
     {
         Label1.Text += nvc[i];
         i++;
         Image1.ImageUrl += nvc[i];
     }
}
 
NameValueCollection 이라는 컬렉션을 이용하여, 쿠키에 담겨진 정보 전부를 저장시킨다.


단, 쿠키를 Request로 받아올때의 주의점이 있다.


변수값을 지정해주지 않은 Request.Cookies는 Session의 의미도 포함하므로 이전에 Session 변수를 사용하였다면, 반드시 위에서 처럼 Cookies의 ["변수값"]까지 명확히 적어주어야 한다.


아니면 쿠키를 받아야하는 자리에 생뚱맞게 Session이 자리 잡고서 주인행세를 할테니 그건 보기 안좋을뿐더러 주객전도된 경우라고 할 수있다.
따라서 값이 증가함에 따라 해당 쿠키에 + 된 값을 받아오는 로직을 구사할수있다.
 
이작업은 왜하는가?
 
쿠키가 웹브라우저에서 존재하는 동안 내가 본 상품목록을 우측상단에 표시하고자할 때 쓰인다.
이 쿠키는 브라우저의 메모리상에만 존재하는 쿠키로서 브라우저를 닫는 순간 사라진다.
오늘 본 상품목록의 재현을 하는 것으로 이를 응용해 더 기능적인 상품목록을 생성시켜 보자.

 

 

Response.Cookies["TodayPD"].Expires = DateTime.Now.AddDays(183);

닫는 순간 사라 진다..??  만기시간을 두면 계속 PC 에 남아 있지 않나 ??

 


 

http://blog.naver.com/tjdjd/90041962184   2009/02/08 23:21

 

 

SessionID값을 부여하여 쿠키에 저장되어진 값과 비교해서 같은 접속자인지 확인하는 소스(같은 계정확인)

 

- 클라이언트에서 서버의 ASP 페이지를 처음 요청할 때 ASP에서는 SessionID를 생성
- SessionID는 각 클라이언트에게 고유한 숫자를 부여하고 브라우저에 쿠기로 저장
- SessionID를 쿠키로 저장하고 있기 때문에 다른 ASP 파일을 요청해도 동일한 쿠키값으로 
- 사용자의 세션을 추적할 수 있습니다.
- 사용자가 세션 시간 제한을 넘겨 다시 세션을 요구하거나 세션을 사용자가 일부러 중단하고 
- 다시 요청할 때도 같은 쿠키 값으로 새로운 세션을 시작합니다.
- SessionID는 서버를 재시작해서 서버의 메모리에 있는 SessionID가 지워진 경우와 사용자가 
- 웹 브라우저를 재시작하는 경우에만 새로운 SessionID를 받습니다. 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>
 <BODY>
  <%
Response.write "당신이 부여받은 SessionID는 "
Response.write Session.SessionID & "입니다. <br>"
' 세션의 유지시간을 30분으로 설정
Session.Timeout = 30
'쿠키값을 텍스트파일에 저장한다.
Response.cookies("sessionid")=Session.SessionID
Dim qqq
'저장된 쿠키값을 qqq변수에 담는다.
qqq = Request.cookies("sessionid")
'Response.write qqq & "<br>"
'만약에 저장된 세션아이디가 쿠키와 같다면 
If Session.SessionID = qqq Then
 Response.write "난 좀 짱인듯!!!!!!!"
End if
%> 
 </BODY>
</HTML>
  
 
   
.

.

.

 


반응형

+ Recent posts