기본적으로 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>
결과
'JSP' 카테고리의 다른 글
[JSP] Mybatis_1 (0) | 2023.11.06 |
---|---|
[JSP] servlet 활용 _ 로그인, 로그아웃 기능만들기 (0) | 2023.11.04 |
[JSP] servlet 활용 _ 사용자목록만들기 (0) | 2023.11.03 |
[JSP] servlet 활용 _ 갤러리만들기 (0) | 2023.11.02 |
[JSP] servlet 활용 _ 파일업로드 (0) | 2023.11.02 |