티스토리 뷰

WEB/DynamicWeb

[JSP] 쿠키와 세션

춘햄 2021. 4. 23. 11:50

Cookie & session?

 쿠키와 세션은 웹 브라우저, 서버에서 임시로 어떤 값들을 저장하고, 활용할 수 있도록 만들어진 임시 저장소라고 생각하면 된다. Web Application에서 적지 않게 사용하는 아주 중요한 개념이다.


cookie

 쿠키는 key와 value 쌍으로 값을 웹 브라우저에 임시 저장하는 데 사용한다. 쿠키의 defualt 수명은 해당 웹 브라우저가 종료될 때 까지이며, 따로 수명을 설정하여 원하는 시간에 종료되게 끔 설정하는 것도 가능하다.

또한 웹 브라우저의 탭 간 공유되는 성질을 가지고 있다. 

 

-Cookie 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>웹 브라우저에 쿠키 전송</title>
</head>
<body>
	<%
		// 1. 쿠키 객체 생성
		 Cookie c = new Cookie("id", "1234");
	
	  	// 2. 쿠키 수명 설정(int 초단위)
	  	c.setMaxAge(60);
		
	  	// 3. 웹 브라우저에 쿠키 전송
	  	response.addCookie(c);
		
	  	response.addCookie(new Cookie("pwd", "1234"));
	  	response.addCookie(new Cookie("age", "27"));
	%>
</body>
</html>

항상 어떤 값을 저장할 때는 response, 꺼낼 때는 request를 사용한다는 것을 잊지말자!

위와 같이 페이지의 소스 보기로 생성된 쿠키를 확인할 수 있다.

또한 한번 생성된 쿠키는 수정할 수 없기 때문에, 동일한 key값으로 덮어 씌워야 한다.


-cookie 추출 

JSP는 우리가 쿠키를 하나만 꺼내 먹는 걸 원하지 않는 할머니와 같다. 쿠키는 반드시 전체 쿠키를 배열로 꺼낸 다음에 사용해야한다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>웹 브라우저에 저장된 쿠키 꺼내기</title>
</head>
<body>
	<%
		// 쿠기는 하나"만" 꺼낼 수 없다.
		Cookie[] cookieArray = request.getCookies();
	
		for(Cookie c : cookieArray){
			out.print(c.getName() + " : " + c.getValue() + "<br />");
		}
	%>
</body>
</html>


Session

세션은 데이터를 웹 서버 쪽에 임시로 저장한다.

 

-세션 생성

세션은 쿠키와는 다르게 객체가 이미 JSP내에서 설정되어 있기 때문에 따로 선언할 필요가 없이 Attribute만 설정해주면 된다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>웹서버의 애플리케이션 영역의 임시저장소</title>
</head>
<body>
JSP는 세션 객체가 미리 설정되어 있다.(내장 객체) <br />
<%
	session.setAttribute("key", "value");  // => Object 형태로 저장되기 때문에 꺼낼 때 형변환이 필요
	session.setAttribute("number", 1234);
%>
</body>
</html>

 -세션 추출 

setAttribute에 저장되는 value는 Object 형식으로 저장되기 때문에 꺼낼 때 반드시 형변환이 필요하다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>session 저장소의 값 추출</title>
</head>
<body>
	<h2>세션 값 추출</h2>
	<%
		String key = (String)session.getAttribute("key");
		int number = (int)session.getAttribute("number");
	%>
	키: <%= key %>
	number: <%= number %>;
	
</body>
</html>


- 세션 Attribute 삭제

세션은 쿠키와 다르게 값을 지울 수 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>session 저장소의 값 추출</title>
</head>
<body>
	<h2>세션 값 추출</h2>
	<%
		String key = (String)session.getAttribute("key");
		int number = (int)session.getAttribute("number");
		session.removeAttribute("id");
	%>
	키: <%= key %>
	number: <%= number %>;
	
</body>
</html>


- 세션 Attributes 를 한번에 추출

열거형을 사용하여 세션이 가지고 있는 모든 값들을 한번에 꺼낼 수도 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.util.Enumeration" %>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>세션에 있는 모든 값들 추출</title>
</head>
<body>
<%
	// 세션에 있는 값을 모두 꺼내려면 열거 타입으로 꺼내야 한다.
	Enumeration<String> names = session.getAttributeNames();
	while(names.hasMoreElements()){
		String name = names.nextElement().toString(); 
	}
%>
</body>
</html>

- 세션 정보: 아래와 같이 코드를 작성하여 다양한 세션 정보를 알 수 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
	<meta charset="UTF-8">
	<title>세션 정보 얻기</title>
</head>
<body>
	<h3> 세션 정보를 얻어내어 출력 </h3>
	<%
		String id_str = session.getId(); //세션 아이디
		long lastTime = session.getLastAccessedTime(); //최종 접속 시간	
		long createTime = session.getCreationTime(); //생성 시간
		
		long time_used = (lastTime - createTime) / 60000;
		
		int inactive = session.getMaxInactiveInterval() / 60;
		
		boolean n = session.isNew();		
	%>
	1. 세션 아이디: <%= id_str %> <br />
	2. 현재 페이지에 머문 시간: <%=time_used %><br />
	3. 세션 유효 시간: <%= inactive %><br />
	4. 새로운 세션 여부: 
	<%
		if(n) out.print("새로운 세션");
		else out.print("새로운 세션 없음");
	%>
</body>
</html>


 

 

 

끝!

'WEB > DynamicWeb' 카테고리의 다른 글

[JSP] JAVA Beans  (0) 2021.04.23
[JSP] 세션 활용 예제 <로그인>  (0) 2021.04.23
[JSP] Action Tags  (0) 2021.04.22
[JSP] JSP -> JSP 로 데이터를 전달하는 다양한 방법  (0) 2021.04.21
[JSP] Application의 상세 정보  (0) 2021.04.21
Comments