BACK END/Servlet

[Servlet] Servlet 정리4 - Cookie, Session

circle kim 2021. 1. 2. 21:27

[목차]

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 : 쿠키 데이터 확인 가능.