Download presentation
Presentation is loading. Please wait.
1
Cookie 와 Session
2
HTTP 프로토콜의 극복 TCP 프로토콜의 응용
지속적인 연결성을 기지고 있는(stateful) 프로토콜 FTP, Telnet 지속적인 연결성을 유지하지 못하는(statelessful) 프로토콜 HTTP 상태를 유지하기 위한 방법들 URL Rewriting Hidden Form Field Cookie Session
3
Hidden Form Field hidden.jsp page contentType="text/html; charset=euc-kr" %> <html><body> <H2>hiddenField LogIn</H2> <hr> <form action = "hidden1.jsp" method = "post"> 아이디 : <input type = "text" name = "name"> <input type ="submit" value = "승인"> </form> </body></html>
4
hidden1.jsp <% String name = request.getParameter("name”); %> <HTML><BODY> <H2>hiddenField page1</H2> <H3><font color ="blue"><%=name %></font>님 로그인 성공하셨습니다.</H3> <HR> <FORM action = "hidden2.jsp" METHOD = “post”> <INPUT TYPE = "hidden" Name = "name" value = "<%=name%>"> <INPUT TYPE = "submit" VALUE = "계속 진행하기"> </FORM> </BODY></HTML>
5
hidden2.jsp page contentType="text/html; charset=euc-kr" %> <% String name = request.getParameter("name"); %> <HTML><BODY> <H2>hiddenField page2</H2> <H3><font color ="blue"><%=name %></font>님의 방문을 환영합니다.<H3> <HR> 즐거운 시간 되세요... <FORM action = "hidden2.jsp" METHOD = “post”> <INPUT TYPE = "hidden" Name = "name" value = "<%=name%>"> <INPUT TYPE = "button" VALUE = "즐거운 페이지로"> </FORM> </BODY></HTML>
6
URL Rewriting urlRewrite.jsp
<html><body> <H2>URL Rewriting Login</H2> <hr> <form action = "urlRewrite1.jsp" method = "get"> 아이디 : <input type = "text" name = "name"> <input type ="submit" value = "승인"> </form> </body></html>
7
urlRewrite1.jsp contentType="text/html; charset=euc-kr" %> import ="java.net.*" %> <% String name = request.getParameter("name"); %> <HTML><BODY> <H2>URL Rewriting page1</H2> <H3><font color ="blue"><%=name %></font>님 로그인 성공하셨습니다.</H3> <HR> <a href = "urlRewrite2.jsp?name=<%= name %>">계속 진행하기</a> </BODY></HTML>
8
urlRewrite2.jsp page contentType="text/html; charset=euc-kr" %> import ="java.net.*" %> <% String name = URLDecoder.decode(request.getParameter("name")); %> <HTML ><BODY> <H2>URL Rewriting page2</H2> <H3><font color ="blue"><%=name %></font>님의 방문을 환영합니다. </H3> <HR> 즐거운 시간 되세요. <a href = "urlRewrite2.jsp?name=<%= name %>">즐거운 페이지로</a> </BODY> </HTML>
9
Cookie 서버가 필요하다고 생각되면 쿠키를 생성한 후 response의 헤더를 통해서 Cookie를 클라이언트의 하드디스크 공간에 저장 클라이언트에 저장된 쿠키 정보는 지속적으로 일정한 시간 동안 유지되며 클라이언트가 재접속 했을 때 서버의 요청으로 쿠키정보를 HTTP Request 헤더에 포함 시켜서 서버로 로딩 쿠키는 서버 쪽 인터페이스에서 클라이언트에 상태 정보를 저장하고 추출할 수 있는 시스템. 쿠키는 매 요청마다 브라우저로부터 서버에게 전송되는 정보 패킷의 일종이며 HTTP 헤더에 포함되어 같이 전송
10
HTTP 메시지 헤더와 쿠키 name = value : 쿠키 이름과 쿠키 값 기술
expire =date : 쿠키의 유효기간 기술 path = serverPath : 쿠키가 전송 될 Server의 URL 패스를 기술, 패스가 맞는 경우에만 쿠키를 전송 domain = serverDomain : 클라이언트가 저장된 쿠키가 요청 시에 전송될 서버의 도메인 기술 secure : SSL과 같은 호스트와 보안성이 있는 채널을 사용하는 경우에만 쿠키를 전송
11
Cookie 설정 하기 Cookie cookie = new Cookie("name","value");
response.addCookie(cookie); SetCookieTest.html <HTML> <HEAD> <TITLE> Set Cookie Test </TITLE> </HEAD> <BODY> <form name ="setCookie" method ="post" action="SetCookieTest.jsp"> Id :<input type = "text" name ="id"><br> Password : <input type = "password" name ="passwd"><br> <input type = "submit" name ="button" value = "확인" > </form> </BODY> </HTML>
12
SetCookieTest.jsp page contentType= "text/html;charset = euc-kr"%> <% String id = request.getParameter("id"); String passwd = request.getParameter("passwd"); String value = request.getHeader("Cookie"); if(value == null) { Cookie cookie = new Cookie(id,passwd); cookie.setMaxAge(60*5); response.addCookie(cookie); out.print("쿠키를 설정합니다.<br>"); } else { out.print("쿠키가 설정 되어있습니다."); } %>
13
Cookie 프로퍼티 프로퍼티 설명 형식 기본값 expires 쿠키가 만료될 시점 Sunday, 24-Mar 02
브라우저 종료시 domain 쿠키가 사용할 수 있는 도메인 쿠키를 저장하는 서버의 주소 path 쿠키를 사용할 수 있는 도메인 내의 주소 / /subpage 쿠키를 저장하는 페이지 경로 secure SSL 상에서만 사용 ture or false false
14
expires : 쿠키가 만료되어 자동 소멸될 시점을 지정
기본값 : 브라우져 종료 시 소멸. 값이 설정되었을 경우 만료 시점이 될 때까지 클라이언트에 존재. domain : 쿠키가 사용될 도메인을 설정 기본값 : 쿠키를 저장하는 서버의 주소가 설정됨 path : 쿠키를 사용할 수 있는 도메인 내의 주소 기본값 : 저장하는 페이지 경로 설정. secure : SSL (Secure Socket Layer)에 관련된 프로퍼티 기본값 : false. 쿠키의 제약조건 클라이언트에 총 300개까지 쿠키 저장 가능 하나의 도메인 당 20개의 값만을 가질 수 있음 하나의 쿠키 값은 4096바이트까지 저장될 수 있음
15
설정된 쿠키값을 가져오는 예제 GetCookieTest
설정된 쿠키값을 가져오는 예제 GetCookieTest.jsp page contentType= "text/html;charset = euc-kr"%> <B>쿠키 읽어 오는 예제</B> <% String value = request.getHeader("Cookie"); if(value == null) { out.print("쿠키를 설정해야 합니다.<br>"); } else { out.print("쿠키가 설정 되어있습니다.<br>"); Cookie[] cookies = request.getCookies(); for(int i = 0;i<cookies.length;i++){ out.print("Name : "+cookies[i].getName()+"<br>"); out.print("Vaule : "+cookies[i].getValue()+"<br>"); out.print("Domain : "+cookies[i].getDomain()+"<br>"); out.print("MaxAge : "+cookies[i].getMaxAge()+"<br>"); out.print("Path : "+cookies[i].getPath()+"<br>"); out.print("Secure : "+cookies[i].getSecure()+"<br>"); out.print("Comment : "+cookies[i].getComment()+"<br>"); out.print("Version : "+cookies[i].getVersion()+"<br><br>"); } } %>
16
쿠키 저장시 설정 가능 (설정 안하면 브라우저 종료시 소멸)
Cookie와 Session의 비교 쿠키 세션 저장되는 곳 클라이언트 서버 저장되는 형식 텍스트 형식 Object 형 만료시점 쿠키 저장시 설정 가능 (설정 안하면 브라우저 종료시 소멸) 정확한 시점을 알 수 없다 리소스 클라이언트의 리소스 사용 서버의 리소스 사용 용량 제한 한 도메인 당 20개 쿠키 하나 당 4KB 총 300개 서버가 허용하는 한 용량에 제한이 없음
17
세션과 쿠키의 차이점 저장되는 곳 쿠키는 클라이언트의 웹 브라우저가 지정하는 메모리 또는 하드디스크에 저장
세션은 생성된 후 서버의 메모리에 저장. 클라이언트 측에서 쿠키사용을 하지 않도록 브라우저를 세팅해 놓으면 쿠키는 저장되지 않는다. 만료시점 쿠키는 저장할 때 expires 속성을 정의해서 무효화 되어 삭제될 날짜를 정확히 지정할 수 있다. 세션은 클라이언트측에서 로그아웃 하거나, 설정한 시간동안 클라이언트측의 반응이 없을 경우에만 무효화되므로 정확한 만료시점은 알 수 없다. 리소스 쿠키는 클라이언트 측에 저장되고 클라이언트의 메모리를 사용하기 때문에 서버상의 자원을 쓰지 않음. 세션은 서버에 저장되고, 서버의 메모리로 로딩되기 때문에 세션이 생성될 때마다 그만큼의 리소스를 차지하게 된다. 용량 제한 쿠키는 클라이언트도 모르게 접속되는 사이트에 의하여 설정될 수 있습니다. 따라서 쿠키로 인하여 문제가 발생하지 않도록 하기 위하여 한 도메인당 20개 총 300개 그리고 하나의 쿠키당 4kb로 저장 용량을 제한해 놓았다. 세션은 클라이언트가 접속하면 서버에 의해서 생성되므로 그 개수나 용량에 제한이 없다.
18
Session이란? 클라이어트가 처음 접속했을 때 클라이언트에 유일한 세션 ID를 부여. 클라이언트는 이 ID를 자동으로 쿠키에 임시 저장하거나, 쿠키가 지원되지 않을 경우에 URL 끝에 붙여 가지고 다니게 된다. 이 세션 ID는 클라이언트가 재접속 했을 때 해당 클라이언트를 구분할 수 있는 수단. 서버에서도 같은 세션 ID를 보관 하고 있어야 하며 클라이언트는 서버에 요청을 할 때 부여 받은 세션 ID를 가지고 요청함으로써 서버는 클라이언트를 구분하게 된다. 서버에 보관된 세션 ID 하나당 메모리를 사용할 수 있게 되며 이 세션 메모리에는 ‘변수=값’의 형식으로 데이터를 보관할 수 있다 HttpSession session = request.getSession() ID session.getID() Last Accessed session.getLastAccessedTime() Max inactive getMaxInactiveInterval(), setMaxInactiveInterval(int interval) Creation time getCreationTime() need to then convert to Date() object, as returns milliseconds since 1 January :00:00 GMT
20
Session 값 세팅하기 SessionLogin.html <html> <body> <h2>Session생성 Test</h2> <form action="sessionCreate.jsp" method="post"> id : <input type="textField" name="id"> <input type="submit"value="확인"> </form> </body> </html>
21
sessionCreate.jsp contentType="text/html;charset=euc-kr" session="false" %> <html> <body> <h2>Session생성 Test</h2> <% String id=request.getParameter("id"); if(id.equals("")){ response.sendRedirect("sessionLogin.html"); return; } HttpSession session=request.getSession(true); if(session.isNew()){ session.setAttribute("id",id); out.print("새로운 세션이 생성되었습니다. <br>"); out.print("세션 ID: " + session.getId()); } else{ %> 이미 세션이 존재합니다.<br> 세션ID :<%=session.getId() %> <%}%> </body> </html>
22
Session 값 얻어 내기 sessionRead
Session 값 얻어 내기 sessionRead.jsp contentType="text/html;charset=euc-kr" session="false"%> <html><body> <% HttpSession session = request.getSession(false); String s = (String)session.getAttribute("id"); if(s==null){ out.print("설정된 세션이 없습니다.<br>"); }else{ out.print("Attribute id 값 : "+s+"<br>"); } %> isNew():<%=session.isNew()%><br> 세션ID:<%=session.getId() %><br> 세션생성시간:<%=new java.util.Date(session.getCreationTime()).toString() %><br> 세션마지막접속시간:<%=new java.util.Date(session.getLastAccessedTime()).toString() %> 세션Active시간:<%=session.getMaxInactiveInterval() %>sec<br> <a href="SessionDelete.jsp">session 삭제하기</a> </body></html>
23
Session 종료하기 sessionDelete.jsp contentType="text/html;charset=euc-kr" session="false"%> <% HttpSession session = request.getSession(false); if(session != null){ session.invalidate(); } %> <h3> 세션이 삭제 되었습니다. </h3> <a href = "sessionLogin.html">로그인 페이지로</a>
24
Session과 Cookie 혼합사용의 예 <로그인 인터페이스> grocery
Session과 Cookie 혼합사용의 예 <로그인 인터페이스> grocery.jsp page contentType="text/html; charset=euc-kr" %> <% if(session.getAttribute("ID") == null){ %> <html> <body> <h2>Jabook grocery</h2> <hr> <form action = "grocery2.jsp" method = "post"> 아이디 : <input type = "text" name = "id"> <input type ="submit" value = "승인"> </form> </body> </html> <% }else{ response.sendRedirect("grocery2.jsp"); } %>
25
<쿠키를 세션으로 담아 처리하는 페이지> grocery2
<쿠키를 세션으로 담아 처리하는 페이지> grocery2.jsp page contentType="text/html; charset=euc-kr" %> <% if(session.getAttribute("ID") == null){ session.setAttribute("ID", request.getParameter("id")); } String id = (String)session.getAttribute("ID"); Cookie cookie[] = request.getCookies(); if (cookie != null && cookie.length>1){ for (int i = 0; i<cookie.length-1; i++){ if (cookie[i].getName().equals("apple")) session.setAttribute("apple",cookie[i].getValue()); if (cookie[i].getName().equals("orange")) session.setAttribute("orange",cookie[i].getValue()); if (cookie[i].getName().equals("banana")) session.setAttribute("banana",cookie[i].getValue()); if (cookie[i].getName().equals("cucumber")) session.setAttribute("cucumber",cookie[i].getValue()); } }
26
else { Cookie appleCookie = new Cookie("apple","0"); Cookie orangeCookie = new Cookie("orange","0"); Cookie bananaCookie = new Cookie("banana","0"); Cookie cucumberCookie = new Cookie("cucumber","0"); session.setAttribute("apple", "0"); session.setAttribute("orange","0"); session.setAttribute("banana","0"); session.setAttribute("cucumber","0"); appleCookie.setMaxAge(1*60*60*24); orangeCookie.setMaxAge(1*60*60*24); bananaCookie.setMaxAge(1*60*60*24); cucumberCookie.setMaxAge(1*60*60*24); response.addCookie(appleCookie); response.addCookie(orangeCookie); response.addCookie(bananaCookie); response.addCookie(cucumberCookie); } %>
27
<html><body> <h2>Jabook grocery</h2> <font color="blue"><%=id%></font>님의 방문을 환영합니다. 즐거운 쇼핑 되세요 <hr> <b>현재 장바구니에 담긴 품목</b> <font size = "2">(새로 담으신 품목은 하루동안 그 정보가 유지됩니다)</font><br> *사과 : <%=session.getAttribute("apple")%> 개<br> *오렌지 : <%=session.getAttribute("orange")%> 개<br> *바나나 : <%=session.getAttribute("banana")%> 개<br> *오이 : <%=session.getAttribute("cucumber")%> 개<br> <a href = "grocery4.jsp"><font size = "2">[모두 구매 및 배달]</font></a> <hr> 한번에 한개씩.. <form action = "grocery3.jsp" method = "post"> <input type = "checkbox" name = "apple">사과 <input type = "checkbox" name = "orange">오렌지 <input type = "checkbox" name = "banana">바나나 <input type = "checkbox" name = "cucumber">오이<br><br> <input type = "submit" value = "장바구니에 담기"> </form> </body></html>
28
<사용자 선택정보를 처리하는 페이지> grocery3
<사용자 선택정보를 처리하는 페이지> grocery3.jsp page contentType="text/html; charset=euc-kr" %> <% int apple = Integer.parseInt((String)session.getAttribute("apple")); int orange = Integer.parseInt((String)session.getAttribute("orange")); int banana = Integer.parseInt((String)session.getAttribute("banana")); int cucumber = Integer.parseInt((String)session.getAttribute("cucumber")); String app = request.getParameter("apple"); String org = request.getParameter("orange"); String ban = request.getParameter("banana"); String cuc = request.getParameter("cucumber"); if (app != null && app.equals("on")){ Cookie appleCook = new Cookie("apple", apple+1+""); appleCook.setMaxAge(1*60*60*24); response.addCookie(appleCook); } if (org != null && org.equals("on")){ Cookie orangeCook = new Cookie("orange", orange+1+""); orangeCook.setMaxAge(1*60*60*24); response.addCookie(orangeCook); }
29
if (ban != null && ban.equals("on")){ Cookie bananaCook = new Cookie("banana", banana+1+""); bananaCook.setMaxAge(1*60*60*24); response.addCookie(bananaCook); } if (cuc != null && cuc.equals("on")){ Cookie cucuCook = new Cookie("cucumber", cucumber+1+""); cucuCook.setMaxAge(1*60*60*24); response.addCookie(cucuCook); } response.sendRedirect("grocery2.jsp"); %>
30
<사용자 선택정보를 처리하는 페이지> grocery4
<사용자 선택정보를 처리하는 페이지> grocery4.jsp page contentType="text/html; charset=euc-kr" %> <% //---결재, 배달 메커니즘 구현했다고 가정 --- Cookie appleCookie = new Cookie("apple","0"); Cookie orangeCookie = new Cookie("orange","0"); Cookie bananaCookie = new Cookie("banana","0"); Cookie cucumberCookie = new Cookie("cucumber","0"); appleCookie.setMaxAge(1*60*60*24); orangeCookie.setMaxAge(1*60*60*24); bananaCookie.setMaxAge(1*60*60*24); cucumberCookie.setMaxAge(1*60*60*24); response.addCookie(appleCookie); response.addCookie(orangeCookie); response.addCookie(bananaCookie); response.addCookie(cucumberCookie); response.sendRedirect("grocery2.jsp"); %>
Similar presentations