본문 바로가기

프로그래밍/JSP

[JSP]쿠키와 세션

쿠키란

 http프로토콜에서 웹 브라우저가 서버로 요청을 하면, 서버는 알맞은 동작을 한 후 웹브라우저에게 응답을 하고 연결을 종료한다. 이처럼 연결이 끊어졌을 때 클라이언트의 정보를 지속적으로 유지하기 위한 수단이 바로 쿠키이다.

 

쿠키의 예) 장바구니 리스트, 자동로그인 체크 등

 

쿠키의 특징

 - 쿠키는 서버가 아닌 클라이언트 컴퓨터의 하드디스크에 사용자 정보를 저장한다.

 - 클라이언트의 일정 폴더에 정보를 저장하기 때문에 서버의 부하를 줄일 수 있다.

 - 기록이 서버가 아닌 클라이언트의 컴퓨터에 남기 때문에 비교적 보안에 취약하다.

 - 문자열 저장용이다. (자료형이 존재하지 않고, 텍스트 파일만 가능하다)

 - 만료 시간 지정이 가능하다 . (장기보관이 가능하고 재접속시에도 유지된다.)

 

 

쿠키 관련 메소드

반환형 메소드 이름 메소드 기능
int getMaxAge()  쿠키의 최대 지속시간을 초 단위로 지정한다.
( 한시간을 표현하기 위해서 60*60으로 표현)

 -1일 경우 브라우저가 종료되면 쿠키를 만료
String getName() 쿠키의 이름을 스트링으로 반환
String getValue() 쿠키의 값을 스트링으로 반환
void setMaxAge(int expiry) 쿠키의 만료시간을 초단위로 설정
void setValue(String newValue) 쿠키에 새로운 값을 설정할 때 사용

 

쿠키 사용 예시

 

 - 쿠키의 정보를 클라이언트에 저장하는 방법

 

 

(1) 쿠키 객체를 생성한다.

Cookie cookie = new Cookie("name", "홍길동");

 

(2) 쿠키에 속성 값을 설정해준다.

cookie.setMaxAge(365*24*60*60);

 setMaxAge메소드를 통해 쿠키의 유효기간을 1년으로 설정하였다.

 

(3) response 객체의 addCookie()메소드를 이용하여 쿠키를 추가한다.

response.addCookie(cookie);

 

- 서버가 클라이언트로부터 쿠키의 정보를 얻어오는 방법

 

(1) 쿠키 객체를 얻어온다.

Cookie[] cookies = request.getCookies();

 

request 객체의 getCookies()메소드를 이용하여 클라이언트의 설정된 모든 쿠키객체들을 얻어온다. 쿠키가 여러개라면 배열형태로 가져온다.

 

(2) 쿠키 객체에 설정된 값을 알아낸다.

for(Cookie cookie : cookies) {

out.println(cookie.getName() + " : "+ cookie.getValue() + "<br>");

}

-쿠키의 이름과 값을 알아내기 위해 getName()과 getValue()를 사용한다.

 

- 쿠키 삭제하기

 쿠키를 더이상 사용하지 못하게 하려면 쿠키의 유효기간을 만료시켜야한다.

 때문에 유효기간을 설정하는 setMaxAge()메소드를 사용하여 유효기간을 0으로 설정하면 된다.

Cookie cookie = new Cookie("id", "");

cookie.setMaxAge(0);

response.addCookie(cookie);

 

세션이란

 세션 또한 연결을 종료 했을 때, 상태를 유지 하기 위한 방법이다. 쿠키가 클라이언트의 컴퓨터에 상태 정보를 저장했다면, 세션은 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.

 

세션의 예) 로그인, 계정권한관련 등

 

 

세션의 특징

 - 서버측에 저장한다.

 - 모든 타입이 저장된다. (문자열, 객체 등 가능)

 - 만료 시간 지정이 가능하다.

 - 웹 브라우저당 1개씩 생성되어 웹 컨테이너에 저장된다.

 - 쿠키에 비해 보안성이 뛰어나다.

 

 

세션 관련 메소드

반환형 메소드 이름 설명
String getId() 세션의 고유 ID를 반환한다.
long getCreationTime() 세션이 생성되었던 시간을 반환한다.
long getLastAccessedTime() 웹 브라우저가 가장 마지막에 세션에 접근한 시간을 반환한다.

 

 

세션 사용 방법

 

(1) 상태 유지를 위해서 세션에 값을 저장하는 방법 (setAttribute()를 이용)

session.setAttribute(String name, Object value);

 

 

(2) 저장된 값을 가져오는 방법 (getAttribute()를 이용한다.)

Object getAttribute(String name);

String id = (String)session.getAttribute("id");

 

 

(3) 여러개의 세션 데이터를 가져오기 위한 방법

Enumeration names = session.getAttributeNames();

while(names.hasMoreElements()) {

String name = names.nextElement().toString();

String value = session.getAttribute(name).toString();

out.println(name + " : "+ value + "<br>");

}

hasMoreElements() :  객체에 데이터가 있는지 검사하여 있다면 true 없으면 false 를 리턴

 

nextElement() : 다음 아이템이 존재하면 하나씩 뽑아내는 역할

 

 

(4) 서블릿에서 세션 저장하기

HttpSession session = request.getSession();

session.setAttribute("name","hong");

 

(5) 세션 제거하기

session.removeAttribute(String args);

session.removeAttribute("id");

 

+ 모든 세션 제거하는 방법

session.invalidate();

 

 

세션 사용 예제

 

세션 정보 및 세팅

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>WebContent/JSP3/sessionTest.jsp</h1>

	<%
		// http 프로토콜을 사용하여 통신시
		// 페이지 요청 (request), 요청에 대한 응답(response)를 완료하고나면
		// 서버와 클라이언트의 연결은 종료된다.
		// 때문에 서버와 클라이언트의 상태를 연결하기 위해서 세션과 쿠키를 사용한다.
	%>

	*컨테이너란 생성, 삭제 등을 모두 수행하는 것.
	<h2> 세션(Session) : 웹 서버의 컨테이너 정보(상태)를 유지하기 위한 정보 <br>
	 - 웹 브라우저당 1개씩 설정 <br>
	 - 서버쪽에서 관리 => 보안상 안전
	 </h2>
	 
	   // 세션 정보 저장
	   session.setAttribute("세션 값 이름", "세션 데이터 값");
	   // 세션 정보 사용
	   session.getAttribute("세션 값 이름")
	   // 세션 정보 삭제(속성 삭제)
	   session.removeAttribute("세션 값 이름");
	   // 세션 정보 초기화
	   session.invalidate();
	   
	   <hr><hr>
	   
	   <h2> 세션 값 : <%=session.getAttribute("id") %> </h2>
	   
	   
	   <input type="button" value="세션값 생성(저장)" onclick="location.href='sessionSet.jsp'"> <br>
	   <input type="button" value="세션값 삭제" onclick="location.href='sessionDel.jsp'"> <br>
	   
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		session.invalidate(); // 세션정보 초기화
	%>

	<script type="text/javascript">
		alert("세션값 초기화 완료");
		location.href="sessionTest.jsp";
	</script>
</body>
</html>

 

세션 삭제

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		session.removeAttribute("id"); // 세션 삭제
		
		response.sendRedirect("sessionTest.jsp"); //다시 원래페이지로 이동
	%>
</body>
</html>

 

세션 초기화

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		session.invalidate(); // 세션정보 초기화
	%>

	<script type="text/javascript">
		alert("세션값 초기화 완료");
		location.href="sessionTest.jsp";
	</script>
</body>
</html>

'프로그래밍 > JSP' 카테고리의 다른 글

[JSP]JDBC insert 예제  (0) 2021.04.08
[JSP]JDBC (자바 & MySQL데이터베이스 연동)  (0) 2021.04.08
[JSP]영역객체와 속성  (0) 2021.03.30
[JSP]액션태그  (0) 2021.03.30
[JSP]내장객체  (0) 2021.03.24