세션(Session)과 쿠키(Cookie) (D-93)

최우정·2022년 5월 23일
0

100일

목록 보기
8/17
post-thumbnail

📒 세션(Session)

세션이란 서버측의 컨테이너에서 관리되는 정보이다.
세션의 정보는 컨테이너에 접속해서 종료되기까지 (브라우저를 종료할 때까지) 유지되며,
접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보는 더 이상 유지되지 않게 설정이 가능하다.

✏️ HTTP 프로토콜의 특성

HTTP란 웹에서 텍스트, 이미지, 사운드 등의 파일을 주고받기 위한 통신 규약이다.
HTTP 프로토콜은 데이터를 요청하고 데이터의 결과 값을 받게 되면 바로 연결은 종료된다.


https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

✏️ 세션의 개요

세션은 클라이언트와 서버 간의 접속을 유지시켜주는 역할을 한다.
클라이언트가 세션에 요청할 경우 서버측에서는 클라이언트에게 클라이언트를 구분할 수 있는
식별자(세션ID)를 부여하게 된다.

✏️ JSP에서의 세션 관리

📝 setAttribute

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

세션 객체에 hongkildong이라는 값이 들어있는 name이라는 이름의 속성을 저장한다.

String name = (String) session.getAttribute("name")

세션 객체에서 name 속성을 얻어오는 역할을 한다.

📝 removeAttribute

session.removeAttribute("name")

지정된 이름의 속성 값을 제거한다.

📝 setMaxInactiveInterval

session.setMaxInactiveInterval(1000);

세션의 유지 시간을 설정한다.

📝 getMaxInactiveInterval

session.getMaxInactiveInterval();

세션의 유지 시간을 반환한다.

📝 invalidate

session.invalidate();

세션의 모든 속성을 제거한다. 세션이 초기화되는 것과 같은 효과를 가져온다.

sessionTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String name;
	if (session.getAttribute("name")!=null) {
		name=(String)session.getAttribute("name");
	}else{
		name="세션 값 없음.";
	}
	%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Test</title>
</head>
<body>
	<h2>세션 테스트</h2>
	<input type="button" onclick="location.href='sessionSet.jsp'" value="세션 값 저장">
	<input type="button" onclick="location.href='sessionDel.jsp'" value="세션 값 삭제">
	<input type="button" onclick="location.href='sessionInvalidate.jsp'" value="세션 값 초기화">
	<h3><%=name %></h3>
</body>
</html>

sessionSet

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%session.setAttribute("name","Session Test!"); %>    
<script>
	location.href="sessionTest.jsp";
</script>

sessionDel

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%session.removeAttribute("name"); %>    
<script>
	location.href="sessionTest.jsp";
</script>

sessionInvalidate

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%session.invalidate(); %>    
<script>
	location.href="sessionTest.jsp";
</script>

📒 쿠키(Cookie)

✏️ 쿠키의 개요

쿠키란 클라이언트 측에서 관리되는 정보를 의미한다. 세션은 서버측에서 관리되지만, 쿠키는 클라이언트에 정보가 저장된다. 쿠키의 정보는 세션과 달리 브라우저를 종료한다고 해도 생존 기간이 지정되면 생존 기간 동안 데이터가 사라지지 않는다.

✏️ HTTP 헤더를 이용한 쿠키 설정

쿠키를 설정하는 방법에는 HTTP 헤더를 이용한 쿠키 설정과, 서블릿 API를 이용한 쿠키 설정 방법이 있다.

✏️ 서블릿 API를 이용한 쿠키 설정

📝 쿠키 객체의 생성자 및 메소드

Cookie cookie = new Cookie(name,value);

쿠키를 생성하였으면, 생성한 쿠키를 클라이언트에 전송해 주어야 한다.

response.addCookie(cookie);

response 객체에 addCookie 메소드를 이용하면 생성한 쿠키 값을 클라이언트로 전송할 수 있다.
메모리에 쿠키 값이 저장된다.

📝 예제로 쿠키의 사용법 익히기

cookieTest1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Cookie cookie = new Cookie ("name", "honkildong");
	cookie.setMaxAge(600);
	response.addCookie(cookie);
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie Test</title>
</head>
<body>
	<h2><%=cookie.getName() %></h2>
	<h2><%=cookie.getValue() %></h2>
	<h2><%=cookie.getMaxAge() %></h2>
	<a href="cookieTest2.jsp">쿠키 값 불러오기</a>
</body>
</html>

cookieTest2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String name="";
	String value="";
	String cookie = request.getHeader("Cookie");
	
	if(cookie!=null){
		Cookie cookies[]=request.getCookies();
		
		for(int i=0; i<cookies.length; i++){
			if(cookies[i].getName().equals("name")){
				name=cookies[i].getName();
				value=cookies[i].getValue();
			}
		}
	}
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie Test</title>
</head>
<body>
	<h2>쿠키 이름 = <%=name %></h2>
	<h2>쿠키 값 = <%=value %></h2>
</body>
</html>

📒 세션과 쿠키를 이용한 예제

✏️ 세션을 이용한 로그인 정보 유지

sessionLogin1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Login</title>
<style>
	#loginArea {
		width: 400px;
		margin: auto;
	}
	table {
		margin: auto;
	}
	td {
		text-align: center;
	}
</style>
</head>
<body>
	<section id="loginArea">
	<form action="sessionLogin2.jsp" method="post">
	<fieldset>
		<legend>로그인</legend>
			<table>
					<tr>
						<td><label for="id">아이디 : </label></td>
						<td><input type="text" name="id" id="id"></td>
					</tr>
					<tr>
						<td><label for="pass">비밀번호 : </label></td>
						<td><input type="password" name="pass" id="pass"></td>
					</tr>
					<tr>
						<td colspan="2"><input type="submit" value="로그인">
						<input type="reset" value="다시 작성"></td>
					</tr>
			</table>
	</fieldset>
	</form>
	</section>
</body>
</html>

sessionLogin2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%session.setAttribute("id", request.getParameter("id")); %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Login</title>
</head>
<body>
	<h3>로그인되었습니다.</h3>
	<h3>로그인 아이디: <%=(String)session.getAttribute("id") %></h3>
	<a href="sessionLogout.jsp">로그아웃</a>
</body>
</html>


sessionLogout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% session.removeAttribute("id"); %>
<h3>로그아웃 되었습니다.</h3>
<a href="sessionLogin1.jsp">로그인 페이지로 이동</a>

✏️ 쿠키를 이용한 사용자 화면 설정 정보 유지

cookieExample1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String language="korea";
	String cookie = request.getHeader("Cookie");
	
	if(cookie!=null){
		Cookie cookies[]=request.getCookies();
		
		for(int i=0; i<cookies.length; i++){
			if(cookies[i].getName().equals("language")){
				language = cookies[i].getValue();
			}
		}
	}
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키를 이용한 화면 설정 예제</title>
</head>
<body>
	<%if(language.equals("korea")) {%>
		<h3>안녕하세요. 이것은 쿠키 예제입니다.</h3>
	<%}else{ %>
		<h3>Hello. This is Cookie example.</h3>
	<%} %>
	
	<form action="cookieExample2.jsp" method="post">
		<input type="radio" name="language" value="korea"
			<%if(language.equals("korea")) {%>checked<%} %>>한국어 페이지 보기
		<input type="radio" name="language" value="english"
			<%if(language.equals("english")) {%>checked<%} %>>영어 페이지 보기
		<input type="submit" value="설정">	
	</form>
</body>
</html>

cookieExample2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Cookie cookie = new Cookie("language", request.getParameter("language"));
	cookie.setMaxAge(60*60*24);
	response.addCookie(cookie);
%>
<script>
	location.href="cookieExample1.jsp"
</script>


profile
비전공자 Java, JavaScript, Html, Css, C++ 공부중

0개의 댓글