세션

  • 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하기 위한 방법을 의미
  • 세션은 서버 공간에 생성되므로 보안 유지에 유리하지만 데이터를 저장하기 위한 한계성에 대한 문제는 존재함
  • 세션은 클라이언트의 요청에 따라 접속된 웹 서버와 가상으로 연결된 상태를 유지하도록 해 줌

 

세션에 의한 클라이언트 구분

  • 세션은 웹 서버 공간에 생성되는 객체로 웹 브라우저마다 하나씩 존재
  • 웹 서버와의 접속을 통해 생성된 세션은 네트워크 환경에서 여러 사용자 중 특정인에 대한 구분자의 역할을 수행
  • 세션을 통해 접속된 웹 브라우저를 닫기 전까지는 웹페이지를 이동하더라도 사용자에 대한 정보가 웹 서버에 객체 상태로 저장되어 있으므로 사용자 정보를 지속적으로 활용할 수 있게 됨

 

세션과 쿠키

  • 웹 브라우저에서 서버로 접속할 때 쿠키 대신 세션을 사용하는 이유는 쿠키에 비해 세션이 보안에 강하기 때문임
  • 쿠키와 세션의 가장 큰 차이점은 웹 브라우저를 통해 서비스를 요청할 때 사용자의 정보가 저장되는 위치
  • 쿠키는 서버의 자원을 전혀 사용하지 않지만 세션은 서버의 자원을 사용함
  • 웹 서비스에 대한 요청 속도는 세션보다 쿠키가 더 빠르므로 쿠키와 세션의 선택은 주어진 개발 환경에 맞춰 사용하면 됨

 

세션 내장 객체 메소드

  • 웹 브라우저에서 웹 서버에게 서비스를 요청할 경우 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 역할을 수행
  • session 객체는 웹 브라우저당 1개의 세션이 할당되도록 하려면 page 디렉티브의 session 속성이 true로 설정되어 있어야 함

 

세션 생성

  • 세션을 생성할 때는 session 내장 객체의 setAttribute( ) 메소드를 사용하여 다음과 같이 생성

괄호 안에 매개 변수의 의미

  • name : 사용할 세션의 이름
  • value : 세션의 속성값

 

세션 정보 확인

단일 세션 정보

  • getAttribute( ) 메소드를 사용하여 세션에 저장된 하나의 세션 속성 이름에 대한 속성을 가져오려면 다음과 같이 선언

  • 주의해야 할 점은 getAttribute( ) 메소드의 반환 유형은 Object 형이므로 반드시 형 변환을 수행한 다음 사용해야 함
  • 괄호 안의 name 매개변수는 세션에 저장된 속성의 이름을 의미하며 name을 선언하지 않게 되면 null의 값을 반환해 줌

 

다중 세션 정보

  • getAttributeNames( ) 메소드를 사용하여 세션에 저장된 여러 개의 세션 속성 이름에 대한 속성을 가져오려면 다음과 같이 선언
  • getAttributeNames( ) 메소드의 반환 유형은 Enumeration 객체 타입이므로 page 디렉티브 태그의 import 속성을 사용하여 java.util.Enumeration을 설정해야 함

 

세션 유효 시간

유효시간 설정 방법

setMaxInactiveInterval( ) 메소드

  • 세션의 유효시간을 설정할 때 사용하는 session 내장 객체의 메소드
  • 메소드의 괄호 안에 정수의 값을 선언한 매개변수로 세션의 유효시간을 설정할 수 있음
  • 세션의 유효시간은 ‘초’ 단위이며 기본값은 1,800초(30분)로 설정되어 있음
  • 세션의 유효시간을 0 또는 음수의 값으로 설정하게 될 경우 유효시간이 없는 상태가 되므로 세션을 삭제 후에도 웹 서버에는 계속해서 남아있게 되어 메모리 부족 현상이 발생될 수 있으므로 주의해야 함

 

 

세션 삭제

단일 세션 삭제

removeAttribute( ) 메소드

  • 단일 세션 memberID를 삭제할 때 사용하는 session 내장 객체의 메소드로 다음과 같이 선언

 

다중 세션 삭제

invalidate( ) 메소드

  • 다중 세션을 삭제할 때 사용하는 session 내장 객체의 메소드로 다음과 같이 선언

 

예제

SessionLoginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<center>
	<h2> 세션 로그인 </h2>
	<form action = "SessionLoginProc.jsp" method = "post">
		<table width = "400" border = "1">
			<tr height = "50">
				<td width="150" align="center"> 아이디 </td>
				<td width="250"> <input type = "text" name = "id"></td>
			</tr>
			<tr height = "50">
				<td width="150" align="center"> 패스워드 </td>
				<td width="250"> <input type = "password" name = "pass"></td>
			</tr>
			<tr height = "50">
				<td align="center" colspan = "2"><input type="submit" value = "로그인"></td>
			</tr>
		</table>
	</form>
</center>
</body>
</html>

 

SessionLoginProc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<%
	//세션이란 클라이언트가 아니라 서버 PC 메모리에 저장되는 것
	//웹 브라우저당 하나의 세션이 만들어진다.
	//그 세션이 웹 컨테이너(톰캣 서버)에 저장됨
	//브라우저가 종료되지 않는 이상 유지
	
	request.setCharacterEncoding("UTF-8");
	String id = request.getParameter("id");
	String pass = request.getParameter("pass");
	
	session.setAttribute("id", id); //세션 값 생성
	session.setAttribute("pass", pass); //세션 값 생성
	session.setMaxInactiveInterval(60*3);
%>
<h3>당신의 아이디는 <%= id %> 이고, 패스워드는 <%= pass %> 입니다.</h3>
<!-- <a href = "SessionLoginProc2.jsp?id=<%=id%>&pass=<%=pass%>">다음 페이지로 이동(get방식으로 넘김)</a> -->
<a href = "SessionLoginProc2.jsp">다음 페이지로 이동</a>
</body>
</html>

 

SessionLoginProc2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<%
	request.setCharacterEncoding("UTF-8");
	//String id = request.getParameter("id");
	//String pass = request.getParameter("pass");
	String id = (String)session.getAttribute("id"); // 세션에 저장된 id값을 가져옴
	String pass = (String)session.getAttribute("pass"); //세션에 저장된 pass값을 가져옴
%>
<h3>당신의 아이디는 <%= id %> 이고, 패스워드는 <%= pass %> 입니다.</h3>
</body>
</html>

 

 

'Java Category > JSP' 카테고리의 다른 글

[JSP] JSP와 데이터베이스 연동  (2) 2023.11.27
[JSP] 액션 태그(Action tag)  (1) 2023.11.27
[JSP] 쿠키(Cookie)  (2) 2023.11.24
[JSP] 내장 객체  (2) 2023.11.24
[JSP] 스크립트 태그(Script Tag)  (1) 2023.11.24