JSP

[JSP] 쿠키와 세션

(งᐛ)ว 2023. 11. 4. 00:54
728x90

기본적으로 HTTP 프로토콜 환경은 1회 요청, 1회 응답으로 연결이 종료된다.
그래서 서버는 클라이언트가 누구인지 매번 확인을 해야 하는데, 이를 보완하기 위해 쿠키와 세션을 이용한다.

 

쿠키

쿠키는 세션과 달리 상태 정보를 웹 서버가 아닌 클라이언트에 저장한다.

클라이언트의 정보를 웹 브라우저에 저장하므로 이후 웹 서버로 전송되는 요청에는 쿠키가 가지는 정보가 포함된다.
웹 브라우저에 접속했던 웹 사이트에 관한 정보와 개인정보가 기록되기 때문에 보안에 문제가 있을 수 있다.

 

쿠키의 동작과정
생성단계 : 쿠키는 웹 서버측에서 생성한다. 생성된 쿠키는 응답 데이터와 함께 저장되어 웹 브라우저에 전송된다. 
저장단계 : 웹브라우저는 응답 데이터에 포함된 쿠키를 쿠키저장소에 보관한다. 쿠키는 종류에 따라 메모리나 파일로 저장된다. 
전송단계 : 웹 브라우저는 한번 저장된 쿠키를 요청이 있을 때마다 웹 서버에 전송한다. 웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행할 수 있다. 

 

일단 웹 브라우저에 쿠키가 저장되면 웹 브라우저는 쿠키가 삭제되기 전까지 웹 서버에 쿠키를 전송한다.

 

 

쿠키의 구성요소 
이름 : 각각의 쿠키를 구별하는데 사용되는 이름 
값 : 쿠키의 이름과 관련된 값 
유효시간 : 쿠키 유지시간
도메인 : 쿠키를 전송할 도메인 
경로 : 쿠키를 전송할 요청경로 

 

 

세션
쿠키의 발전된 형태로 서버와 클라이언트간의 상태를 지속적으로 유지하는 방법이다. 
세션은 웹 서버에서만 접근이 가능하므로 보안유지에 유리하며 데이터를 저장하는데 한계가 적다. 
세션은 오직 웹 서버에 존재하는 객체로 웹 브라우저마다 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 된다. 
세션을 사용하면 클라이언트가 웹 서버의 세션에 의해 가상으로 연결된 상태가 되고 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 서버에 보관되어 있어 사용자 정보를 잃지 않는다. 
JSP페이지는 세션기능을 사용할 수 있도록 SESSION 내장객체를 제공한다.

 

 

쿠키와 세션의 차이

 

 


 

SetCookieAction.java

URL mappings 수정명 : /cookie.do

package action;

import java.io.IOException;

/**
 * Servlet implementation class SetCookieAction
 */
@WebServlet("/cookie.do")
public class SetCookieAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//쿠키생성 
		//Cookie 클래스를 사용하여 쿠키생성 
		//쿠키를 생성하는데는 Cookie()메서드를 사용한다. 
		//쿠키를 생성한 후 response 내장객체의 addCookie()메서드로 쿠키를 설정해야 한다. 
		
		Cookie cookie = new Cookie("param1", "홍길동");
		response.addCookie(cookie);
		
		//response.sendRedirect("ex01_Cookie.jsp");
		
		
		//쿠키 만료시간설정
		cookie.setMaxAge(60*60*24*7); //일주일 //3600초는 한시간, *24는 하루, *7은 일주일
		
		//쿠키삭제 
		//Cookie클래스는 쿠키삭제기능이 없지만 만료시간이 지나면 자동삭제됨
		//쿠키를 유지할 필요가 없으면 쿠키의 유효시간을 만료하면됨
		//setMaxAge()메서드에 유효기간을 0으로 설정하여 쿠키 삭제가능
		//cookie.setMaxAge(0);
		
		Cookie cookie2 = new Cookie("param2","김길동");
		response.addCookie(cookie2);
		
		
		//클라이언트에 저장된 모든 쿠키 객체를 가져오려면 request객체의 getCookies()메서드를 사용한다. 
		//쿠키객체가 여러개일때는 배열형태로 가져온다.
		Cookie[] cookies = request.getCookies();
		
		for(Cookie c : cookies) {
			System.out.println("이름 : "+c.getName());
			System.out.println("값 : "+c.getValue());
			System.out.println("-------------------------------");
		}		
		
		response.sendRedirect("ex01_Cookie.jsp");		 
		
	}

}

 

 

ex01_Cookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		쿠키저장완료<br>
		쿠키이름 : ${cookie.param1.name}<br>
		쿠키내용 : ${cookie.param1.value}<br>
	</body>
</html>

 

 

결과

 

 

 


 

ex02_Session.jsp

<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<% 
	session.setAttribute("param1", "1111");
	session.setAttribute("param2", "2222");
	session.setAttribute("param3", "3333");
	
	session.removeAttribute("param1"); //지우기
	
	Enumeration<String> names = session.getAttributeNames();
	
	while(names.hasMoreElements()){ //다음요소가 들어있으면 true, 없으면 false
		String key = names.nextElement(); //다음요소로 이동
		String value = (String)session.getAttribute(key); //해당 키값을 가지는 세션객체를 가져와서 문자열로 형변환
		out.println(key+"="+value+"<br>");
	}
%>    
    
    
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
	
	</body>
</html>

 

 

결과

728x90