[Servlet] Servlet 정리4 - Cookie, Session
[목차]
6. 쿠키
7. 세션
* http : 요청을 하고 응답이 클라이언트에게 전송이 되면 서버에서 발생한 모든 정보가 지워진다.(stateless)
* 상태유지 기술
- 세션
- 쿠키
[내용]
7. 쿠키(Cookie) : 클라이언트에 저장되는 텍스트 조각
client(브라우저) | request ------------> getCookie |
server(sevlet) | setAttrubute() ------------> |
request객체 | getAttribute() ------------> |
jsp |
setCookie <------------ response |
1) setCookie
//Servlet
Cookie cookie1 = new Cookie("name","value"); // Cookie객체 생성 및 데이터 저장
cookie1.setMaxAge(60*60*24); // 쿠키에 유효시간 설정(단위 : 초)
// setMaxAge(-1) : 브라우저 종료시 까지 유지
// setMaxAge(0) : 제거
response.addCookie(cookie1); // response에 쿠키 저장
RequestDispatcher rd = request.getRequestDispatcher("context제외된 경로"); // 요청재지정
rd.forward(request, response);
2) getCookie
//Servlet
Cookie[] cookies = request.getCookies(); //request에서 쿠키정보 꺼내기(배열로 리턴됨)
// 쿠키의 name정보를 이용해서 작업하기
String name = "";
for(int i=0;i<cookies.length;i++) {
if(cookies[i].getName().equals("name")) { // 쿠키의 배열에서 key값인 "name"의 value값 get
name = cookies[i].getValue();
}
}
request.setAttribute("name", name); // 쿠키에서 뺀 데이터를 request에 공유
RequestDispatcher rd = request.getRequestDispatcher("context가 제외된 경로"); // 요청 재지정 - forward
rd.forward(request, response);
// jsp
<%
String name = (String)request.getAttribute("name");
%>
<%= name %>
7. 세션(Session)
- 사용자가 브라우저를 키고 사용하는 동안 정보가 유지된다.
- 서버메모리에 저장된다.
- 내부적으로 쿠키처럼 처리.
1) 세션 사용
① request에서 세션정보 추출
② 세션이 없는 경우
-> 세션 만들기
세션이 있는 경우
-> 세션id와 일치하는 세션에 저장된 정보를 확인.
③ 세션 id를 response에 보낸다.
2) 세션객체 만들기
- 세션 id를 request에서 꺼내서 작업하는 것이므로 request객체에서 기존의 세션 정보를 가져오거나 새로
만들어주는 메소드를 제공.
① getSession()
- 새로운 세션은 만들때 사용하는 메소드
- request객체에서 세션 id를 추출하는 데 만약 세션이 만들어져 있지않은 상태면 세션을 새로 생성해서 리턴
ex) 로그인하기 위해서 로그인 버튼을 클릭하고 요청되는 로그인 서블릿에서 로그인이 성공하면 세션을 새로
만든다.
② getSession(boolean)
- 기존에 작업하는 세션이 있는 지 확인하기 위해서 사용
- getSession(true) - getSession()과 동일하게 동작
- getSession(false) - 기존에 사용하던 세션이 있으면 섹션객체를 리턴하고 없으면 새로만들지 않고 null을 리턴.
//servlet
String id = request.getParameter("id");
HttpSession ses = request.getSession(); //데이터 공유 - 세션
ses.setAttribute("id", id);
RequestDispatcher rd = request.getRequestDispatcher("context가 제외된 경로"); //요청 재지정 - forward
rd.forward(request, response);
//jsp
<%
String id = (String)session.getAttribute("id");
%>
<%= id %>
<tip>
* Chrome 개발자도구 F12 - Application - Cookies : 쿠키 데이터 확인 가능.