서로관련된페이지의유지 서로관련된페이지란? - 사용자가특정사이트에접속했을때, 사용자의정보를미리파악하고사용자화면에환영의메세지를띄우는방식처럼웹페이지간에서로일정한관계가있는것처럼동작시키는페이지를말한다. - 웹페이지는서로독립적인페이지이므로, 서로관련을시키기위해서는공통의데이터를사용하도록해야한다. - 이와같이서로공통의데이터를사용하도록하는방법에 쿠키 와 세션 이있다. 쿠키 (Cookie) - 쿠키는웹서버와클라이언트브라우저간에데이터를공유하는방법이다. 웹페이지 요청 쿠키 웹서버 - 쿠키의동작순서쿠키와함께요청 1 클라이언트가웹서버에요청한다. 2 웹서버가클라이언트로데이터를전송한다. 3 클라이언트는수신된데이터를쿠키에저장한다. 4 쿨라이언트가다음에동일한웹서버에요청을할때쿠키에저장된데이터를웹서버로전송한다. 5 웹서버는데이터를확인하고이전에접속했던클라이언트임을확인한다. 6 웹서버는적절한환영인사를클라이언트로전송한다. 새로운데이터를쿠키에저장하는방법 - 쿠키데이터를클라이언트측에저장하기위해서는두가지작업을해야한다. 1 Cookie 객체를생성한다. 2 생성된 Cookie 객체의 addcookie() 메소드를사용한다. - 쿠키클래스는 javax.servlet.http 패키지에속해있다. - 쿠키객체를생성하기위해서는 쿠키의이름 과 값 이필요하다. 이두가지는모두 String 형태이다. 쿠키생성예 ) Cookie cookie = new Cookie("AGE", "26"); - 위의예는 AGE라는이름의쿠키를생성하고 26을값을저장한다. - 쿠키가생성이되었으면 response.addcookie(cookie); 를사용해서쿠키를클라이언트측에저장한다. - 쿠키데이터를클라이언트측에저장하는 JSP의예 (StoreCookies.jsp) response.addcookie(new Cookie("NAME", "John")); response.addcookie(new Cookie("GENDER", "Male")); response.addcookie(new Cookie("AGE", "15")); <HTML><HEAD><TITLE> 쿠키데이터저장 </TITLE></HEAD> <BODY> 쿠키데이터가저장되었습니다.</BODY></HTML> - 1 -
- 쿠키의처리는가급적 JSP 페이지의상단부, 즉 <HTML> 이시작되기전에한다. 이전에방문했던사실을어떻게알수있을까? - 클라이언트는웹서버에접속할때쿠키도함께전송하므로, 웹서버에서는쿠키를확인해서이전에방문했던클라이언트의여부를확인할수있다. - 쿠키를수신하기위해서는 request.getcookie() 메서드를사용한다. 이메서드는모든쿠키정보를리턴하므로, 쿠키정보를수신하려면배열변수에저장해야한다. - 쿠키수신예 ) Cookie cookies[] = request.getcookies(); - 쿠키를수신한후, 특정한쿠키정보를찾기위해서는쿠키객체를하나씩이름을비교해야한다. 이를위해서 getname() 메서드를사용한다. - 원하는쿠키를찾았으면, getvalue() 메서드를사용해서값을읽어온다. - 다음은저장된쿠키의데이터를읽는예저 JSP(ReadCookies.jsp) @page contenttype="text/html; charset=euc-kr" Cookie[] cookies = request.getcookies(); <HTML> <HEAD><TITLE> 쿠키데이터읽기 </TITLE></HEAD> <BODY> 이름 : = getcookievalue(cookies, "NAME") <BR> 성별 : = getcookievalue(cookies, "GENDER") <BR> 나이 : = getcookievalue(cookies, "AGE") </BODY> </HTML>! private String getcookievalue(cookie[] cookies, String name) { String value = null; if (cookies == null) for (Cookie cookie : cookies) { if (cookie.getname().equals(name)) return cookie.getvalue(); - 위의예제는쿠키에저장된데이터중에 "NAME", "GENDER", "AGE" 들을찾고, 만약에쿠키에존재하면값을읽어서클라이언트에출력한다. - 쿠키테스트를다음과같이진행한다. 1 StoreCookies.jsp를실행한뒤동일한브라우저에서 ReadCookies.jsp를실행한다. -> 결과확인 2 StoreCookies.jsp를실행한뒤브라우저를닫고새로운브라우저에서 ReadCookies.jsp를실행한다. -> 결과확인 - 2 -
- 위의두가지테스트결과는서로다른다. - 1의결과는브라우저에 "John", "Male", "15" 라는쿠키에저장되었던데이터가출력된다. - 2의결과는부라우저에 null, null, null이출력된다. 즉, 아무런데이터를출력하지못한다. - 2의결과가발생한이유는웹브라우저가종료되면자신이가지고있던쿠키를지워버리기때문이다. 쿠키의구성 - 쿠키를구성하는요소는다음과같다. 이름 : 각각의쿠키를구별하는데사용되는이름 값 : 쿠키의이름과관련된값 유효시간 : 쿠키가유지되는시간 도메인 : 쿠키를전송할도메인 경로 : 쿠키를전송할요청경로 - 쿠키의이름은다음의규칙을지켜야한다. 쿠키의이름은알파벳과숫자만을포함할수있다. 콤마 (,), 세미콜론 (;), 공백 ( ) 등의문자는포함할수없다. $ 문자로시작할수없다. - 쿠키를생성한후에는다음의메소드를사용하여쿠키를처리한다. 메서드 리턴타입 설명 getname() String 쿠키의이름을구한다. getvalue() String 쿠키의값을구한다. setvalue(string value) void 쿠키의값을지정한다. setdomain(string pattern) void 이쿠키가전송될서버의도메인을지정한다. getdomain() String 쿠키의도메인을구한다. setpath(string uri) void 쿠키를전송할경로를지정한다. getpath() String 쿠키의전송경로를구한다. setmaxage(int expiry) void 쿠키의유효시간을초단위로지정한다. 값이음수이면브라우저를닫을때쿠키가함께삭제된다. getmaxage() int 쿠키의유효시간을구한다. 쿠키의변경 - 쿠키의변경은쿠키를생성할때마찬가지로, 쿠키를생성하고 addcookie() 메소드를사용한다. 웹브라우저는동 일한이름의쿠키를찾아서새로운쿠키의값을저장한다. 쿠키의삭제 - 쿠키의삭제는삭제하는기능의메소드를사용하는것이아니고, 쿠키의생존기간을 0으로설정함으로써삭제를수행한다. - 웹브라우저는종료가될때자신이가니고있던쿠키를모두지워버리는것을기본동작으로한다. - 그러나, 쿠키에수명을지정하면웹브라우저와는상관없이지정된수명동안보존된다. - 쿠키에수명을부여하기위해서는 addcookic() 메서드를호출하기전에 setmaxage() 메서드를호출해서쿠키의생존기간을설정한다. - 쿠키의수명을설정하는예 ) Cookie cookie = new Cookie("LIFE", "GOOD"); cookie.setmaxage(3600); 쿠키의생존시간을 1시간 (3600초) 으로설정 response.addcookie(cookie); - 3 -
- 쿠키를삭제하는방법 : cookie.setmaxage(0); 해당쿠키를찾아서삭제한다. - 웹브라우저가종료되면쿠키를삭제하도록설정 : cookie.setmaxage(-1); 마이너스값을설정 도전과제 : 위의예제 StoreCookies.jsp에서생성했던 GENDER" 라는이름의쿠키를삭제하는 DeleteCookie.jsp 를작성하세요. 그리고, ReadCookies.jsp를실행해서삭제가되었는지확인하세요. 확인순서는다음과같습니다. 1 StoreCookies.jsp("NAME", "GENDER", "AGE" 쿠키를생성한다.) 2 ReadCookies.jsp( 쿠키를읽어서생성을확인한다.) 3 DeleteCookie.jsp("GENDER" 쿠키를삭제한다.) 4 ReadCookies.jsp( 쿠키를읽어서삭제를확인한다.) - 4 -
쿠키의선택적적용즉, 특정한폴더의페이지에서만쿠키를설정하도록한다. - 쿠키에경로를설정하면해당경로에있는페이지에서만쿠키를생성할수있다. - setpath() 메서드를사용해서경로를지정한다. - 경로지정의예 ) cookie.setpath("/ 프로젝트이름 /sub1"); 경로이름를지정한다. - 위와같이쿠키에경로를지정하면, sub1 폴더에있는페이지에서만쿠키를설정할수있게된다. - sub1 폴더밒에있는페이지에서만쿠키를사용하도록하는예제 ) - 위의그림과같이구성한다. - StoreJobCookie.jsp @page contenttype="text/html; charset=euc-kr" Cookie cookie = new Cookie("JOB", "programmer"); cookie.setpath("/cookietest/sub1"); response.addcookie(cookie); <HTML> <HEAD><TITLE> 쿠키데이터저장하기 </TITLE></HEAD> <BODY> JOB 쿠키가저장되었습니다. </BODY> </HTML> - ReadJobCookie.jsp Cookie[] cookies = request.getcookies(); <HTML> <HEAD><TITLE> 쿠키데이터읽기 </TITLE></HEAD> <BODY> JOB: = getcookievalue(cookies, "JOB") </BODY> </HTML>! private String getcookievalue(cookie[] cookies, String name) { String value = null; - 5 -
if (cookies == null) for (Cookie cookie : cookies) { if (cookie.getname().equals(name)) return cookie.getvalue(); - 다음순서로실행하면서결과를확인한다. 1 "sub1" 의 StoreJobCookie.jsp를실행한다. 2 동일한브라우저에서 URL 부분의 StoreJobCookie.jsp를 ReadJobCookie.jsp로고치고 새로고침 버튼을클릭한다. 결과를확인한다. 3 동일한브라우저에서 URL 부분의 /sub1/storejobcookie.jsp를 /sub2/readjobcookie.jsp로고치고 새로고침 버튼을클릭한다. 결과확인. - 위의결과정리 쿠키의 setpath() 메서드에의해서설정된경로에서만쿠키를확인할수있다. 쿠키를사용한로그인처리 - 웹사이트의가장기본적인기능중의하나는회원인지의여부를판단하는로그인 / 로그아웃기능이다. - 사용자의로그인상태를쿠키에기록해서사용자의상태를판단한다. - 다음은로그인과정을쿠키에기록하는과정이다. 1 사용자가로그인하면쿠키를생성한다. 2 관련된쿠키가존재하면로그인한상태라고판단한다. 3 사용자가로그아웃하면쿠키를삭제한다. - 예를들면, 사용자가로그인에성공하면 "LOGIN" 이라는쿠키를생성하고, "LOGIN" 쿠키가존재하는동안은로그인한상태라고판단한다. - 로그인정보입력 JSP(loginForm.jsp) <form action = "memberlogin.jsp" method = "post"> 아이디 <input type = "text" name = "id" size = "10"> 암호 <input type = "password" name = "password" size = "10"> <input type = "submit" value = " 로그인 "> </form> - 로그인처리 JSP(memberLogin.jsp) String id = request.getparameter("id"); String password = request.getparameter("password"); if(id.equals(password)) { 사용자 id와암호가동일한것이면로그인에성공한것으로한다. Cookie cookielogin = new Cookie("LOGIN", "SUCCESS"); Cookie cookieid = new Cookie("ID", id); - 6 -
response.addcookie(cookielogin); response.addcookie(cookieid); 로그인에성공했습니다. else { 로그인에실패했습니다. - 로그인여부판단 JSP(loginCheck.jsp) Cookie[] cookies = request.getcookies();! private String getcookievalue(cookie[] cookies, String name) { String value = null; if (cookies == null) for (Cookie cookie : cookies) { if (cookie.getname().equals(name)) return cookie.getvalue(); <html> <head><title> 로그인여부검사 </title></head> <body> 아이디 = getcookievalue(cookies, "ID") 로로그인한상태입니다. </body> </html> 쿠키를사용한로그아웃처리 - 로그아웃은로그인할때생성했던쿠키를삭제하는기능을수행한다. - 쿠키의삭제는쿠키의유효시간을 0으로지정하면된다. 따라서, 로그인할때생성했던 "LOGIN" 쿠키와 "ID" 쿠키를삭제하면로그아웃이처리된다. - 7 -
- 로그아웃처리 JSP(logout.jsp) Cookie cookielogin = new Cookie("LOGIN", ""); cookielogin.setmaxage(0); response.addcookie(cookielogin); Cookie cookieid = new Cookie("ID", ""); cookieid.setmaxage(0); response.addcookie(cookieid); out.println(" 로그아웃이하였습니다."); 도전과제 : 위의예제를응용해서로그인한후 10 초후에자동으로로그아웃되도록위의 JSP 를수정하세요. 힌트 ) 로그아웃기능은쿠키를삭제하는것으로구현합니다. - 8 -