KOSTA 32일차) session / cookie / 세션 트래킹

해버니·2023년 4월 10일
0

KOSTA

목록 보기
27/32
post-thumbnail

세션과 쿠키

용도

클라이언트에 대해서 유지해야 하는 정보를 저장하는 용도로 사용한다.
요청 한 개에 필요한 정보는 request에 담고 로그아웃할 때까지 유지해야 하는 정보는 session에 담는다.



세션 트래킹

웹 어플리케이션에 첫 요청을 하면 세션 id 발급
어디에 담아서? 쿠키에 담아서!

클라이언트는 매 요청시 request 헤더에 발급받은 session id를 담아서 보낸다.

session.setAttribute();
session.getAttribute();

jsp에서는 get을 쓰지 않고 el표현식을 썼었다.

${sessionScope.이름}
session.invalidate(); // 세션 무효화





쿠키

클라이언트 컴퓨터에다가 필요한 정보를 저장하는 것이다.
데이터 유형은 텍스트 파일의 형태로 보관한다.




이 쿠키는 어떻게 사용을 하는가?

서버쪽에서 클라이언트를 관리하는데 필요한 정보를 저장하는데 쿠키를 담아서 클라이언트쪽에 저장을 해야한다.
쿠키를 생성해서 정보를 담아 클라이언트한테 보내려면 쿠키를 어디에 담아? response에다가 담는다!
쿠키텍스트 형태이기 때문에 보안상으로 취약할 수 있다.
중요한 정보session에다가 저장하는게 좋다.
서버가 클라이언트를 관리하기 위해서 쿠키를 사용하는 것이다.







정보를 담으려면 쿠키를 생성해야 한다.

Cookie c = new Cookie("쿠키이름", "값");




생성한 쿠키를 response에 담는다.

response.addCookie(c);

=> c에 담긴 정보가 response에 담겨서 클라이언트에 저장된다.
그래서 그 다음 요청시에 request에서 클라이언트에 있는 cookie값을 뽑아낼 수(꺼낼수)있다.


request.getCookies();

=> request에 담긴 전체 쿠키를 읽음.
반환값은 배열이다 (Cookie[])













쿠키 실습




index.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h3>게시판</h3>
<a href="${pageContext.request.contextPath }/member/login">로그인</a>
<br/>
<h3>쿠키값</h3>
${cookie.name.name} : ${cookie.name.value } <br/>
${cookie.hobby.name} : ${cookie.hobby.value } <br/>
${cookie.JSESSIONID.name } : ${cookie.JSESSIONID.value } <br/>

</body>
</html>







CookieRead.java

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		PrintWriter pw = response.getWriter();
		pw.append("<html><body>");
		Cookie[] cookies = request.getCookies();
		// request에 담긴 모든 쿠키 객체를 읽어들인다.
		for(Cookie c:cookies) {
			pw.append("<h3>");
			pw.append(c.getName() + " : ");
			// Cookie.getName() => 쿠키 이름 반환
			pw.append(c.getValue() + "<br/>");
			// Cookie.getValue() => 쿠키값 반환
			pw.append("</h3>");
		}
		pw.append("</body></html>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}







CookieTest.java

여기서 실행하기 ~.~

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("euc-kr");
		response.setCharacterEncoding("euc-kr");
		response.setContentType("text/html; charset=EUC-KR");

		Cookie c1 = new Cookie("name", "mango"); // 쿠키 생성
		Cookie c2 = new Cookie("hobby", "산책하기");
		response.addCookie(c1); // response에 쿠키를 담음
		response.addCookie(c2);

		response.sendRedirect(request.getContextPath() + "/index.jsp");
		// 클라이언트에 저장해야하므로 sendRedirect를 쓴다.
		// dispatcher를 쓰면 서버 내로만 이동하기 때문에 클라이언트에서는 아무 정보가 없게 되기 때문에
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}







0개의 댓글