WEB/JSP

[JSP] cookie, session, removeAttribute

hvoon 2022. 9. 9. 19:14

cookie

-쿠키는 웹사이트 접속시 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 텍스트 데이터임

-웹사이트는 쿠키를 통해 접속자의 장치를 인식하고 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장함

-쿠키에는 만료일이 있음. 브라우저를 닫는 경우 자동으로 삭제되는 쿠키가 있을 수 있으며 일부는 수동으로 삭제 되기 전까지 남아 있는 쿠키가 있음

필수쿠키 페이지 탐색 웹사이트의 보안 영역 접속 그리고 검색을 포함한 웹사이트의 기본기능을 활성화할 목적으로 사용함
기능쿠키 웹사이트가 접속자의 지역 및 언어 등 웹사이트의 행태 및 외관에 영향을 줄 수 있는 접속자 설정을 저장하도록 허용하며, 접속자 설정에 따라 웹사이트가 작동하도록 도움을 줌
성능쿠키 정보의 익명 수집 및 보고를 통해 웹사이트 운영자가 방문자와 웹사이트 사이의 상호 작용을 이해하는데 도움을 주며, 유저와 상호관계에 대한 통계자료를 제공함으로서 웹사이트 운영자가 더욱 최적화된 웹사이트 개발에 기여함

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>01_setCookies.jsp</title>
</head>
<body>
<%
	// 1. Cookie 객체 생성
	Cookie c=new Cookie("id","hong123");

	// 2. 쿠키의 유효기간 설정
	c.setMaxAge(365*24*60*60); // 1년간의 쿠키 수명 유지
	
	// 3. 클라이언트에 쿠키 전송
	response.addCookie(c);
	
	// 4. new 쿠키를 생성하여 클라이언트에 바로 전송
	response.addCookie(new Cookie("pwd","text1234"));
	response.addCookie(new Cookie("age","20"));
%>
<!-- pageContext, request, session,application 등은 
     서버에 존재하며 이용할 수 있는 저장소라면
     쿠키는 클라이언트 쪽에 저장되는 저장소임 -->
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>02_getCookies.jsp</title>
</head>
<body>
<% 
Cookie[] cookies=request.getCookies(); 
// 쿠키내용 한번에 다 얻어오는 명령-쿠키객체 배열로 얻어옴
for(Cookie c:cookies){
	out.println("<h2>"+c.getName()+" : "+c.getValue()+"</h2>");
}
%>
</body>
</html>

 

01_setCookies.jsp 실행 창을 열어둔 채로 02_getCookies.jsp 실행한 결과
위를 진행한 후 02_getCookies.jsp만 실행한 결과. setMaxAge로 유효기간 설정한 id만 남음


session

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>03_Session.jsp</title>
</head>
<body>
<%
session.setAttribute("id","hong");
session.setAttribute("pwd","1234");
session.setAttribute("age",20);
%>
</body>
</html>

 

1. 세션에 저장된 값 하나씩 추출

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>04_getSession.jsp</title>
</head>
<body>
<h3>세션에 저장된 값 하나씩 추출</h3>
<%
String id=(String) session.getAttribute("id");
String pwd=(String) session.getAttribute("pwd");
Integer age=(Integer) session.getAttribute("age");
// Attribute에 저장되었던 모든 자료는 getAttribute로 꺼냈을 때 
// Object형이므로 원래의 자료형으로 사용하기 위해서는 
// (자료형) 같은 형변환이 필요함
%>
id: <%=id %><br>
pwd: <%=pwd %><br>
age: <%=age %><br>
</body>
</html>

 

2. 세션에 설정된 모든 값 얻어오기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>04_getSession.jsp</title>
</head>
<body>
<h3>세션에 설정된 모든 값 얻어오기</h3>
<%
java.util.Enumeration<String> names=session.getAttributeNames(); 
// 세션에 저장된 키값들만 얻어서 저장함
while(names.hasMoreElements()){

	// nextElement를 String형 변수에 저장
	String name=names.nextElement().toString();
	// (String) 형변환을 사용하지 않고 형변환 메서드를 사용

	// 얻어낸 키(name)값으로 세션에서 getAttribute로 value 값을 추출함
	String value=session.getAttribute(name).toString();
	// (String) 형변환을 사용하지 않고 형변환 메서드를 사용

	out.println(name+" : "+value+"<br>");
}
%>
</body>
</html>

03_Session.jsp 실행한 창 열어놓고 실행

 

3. 세션 정보를 얻어오는 메서드를 사용하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>05_Session_Info.jsp</title>
</head>
<body>
<h3>세션 정보를 얻어오는 메서드를 사용하기</h3>
<%
	String id_str=session.getId(); // 현재 세션의 고유코드 얻음
	
	long createdtime=session.getCreationTime(); // 생성시간: 밀리초
	long lasttime=session.getLastAccessedTime(); // 마지막 접근 시간: 밀리초
	
	// 사용시간(마지막 접근시간-생성시간): 밀리초 -> 1000으로 나누어 초단위로
	long time_used=(lasttime-createdtime)/1000;
	session.setMaxInactiveInterval(3600); // 세션의 수명(단위: 초)
	int inactive=session.getMaxInactiveInterval()/60; // 수명을 분단위로 변환
	boolean b_new=session.isNew(); // 새로 만든 세션의 여부
%>
[1] 세션 ID는 [<%=id_str %>] 입니다.<br><hr>
[2] 당신이 웹사이트에 머문 시간은 <%=time_used %>초입니다.<br><hr>
[3] 세션의 유효 시간은 <%=inactive %>분입니다. <br><hr>
[4] 세션이 새로 만들어졌나요?<br>
<%
	if(b_new) out.print(" 예! 새로운 세션을 만들었습니다.");
	else out.print(" 아니오! 새로운 세션을 만들지 않았습니다.");
%>
</body>
</html>

03_Session.jsp 실행한 창 열어놓고 실행


removeAttribute

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>06_RemoveAttribute.jsp</title>
</head>
<body>
<%
	session.setAttribute("s_name1","저는 세션에 저장된 첫번재 값");
	session.setAttribute("s_name2","저는 세션에 저장된 두번재 값");
	session.setAttribute("s_name3","저는 세션에 저장된 세번재 값");
	
	out.print("<h3> >>세션값을 삭제하기 전<< </h3>");
	java.util.Enumeration<String> names=session.getAttributeNames(); 
	while(names.hasMoreElements()){
		String name=names.nextElement().toString();
		String value=session.getAttribute(name).toString();
		out.println(name+" : "+value+"<br>");
	}

    // 이름을 지정하여 세선에 저장된 객체를 제거함
	session.removeAttribute("s_name2"); 

	out.print("<hr><h3> >>세션값을 삭제한 후<< </h3>");
	names=session.getAttributeNames();
	while(names.hasMoreElements()){
		String name=names.nextElement().toString();
		String value=session.getAttribute(name).toString();
		out.println(name+" : "+value+"<br>");
	}
%>
</body>
</html>