세션
- 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하기 위한 방법을 의미
- 세션은 서버 공간에 생성되므로 보안 유지에 유리하지만 데이터를 저장하기 위한 한계성에 대한 문제는 존재함
- 세션은 클라이언트의 요청에 따라 접속된 웹 서버와 가상으로 연결된 상태를 유지하도록 해 줌
세션에 의한 클라이언트 구분
- 세션은 웹 서버 공간에 생성되는 객체로 웹 브라우저마다 하나씩 존재
- 웹 서버와의 접속을 통해 생성된 세션은 네트워크 환경에서 여러 사용자 중 특정인에 대한 구분자의 역할을 수행
- 세션을 통해 접속된 웹 브라우저를 닫기 전까지는 웹페이지를 이동하더라도 사용자에 대한 정보가 웹 서버에 객체 상태로 저장되어 있으므로 사용자 정보를 지속적으로 활용할 수 있게 됨
세션과 쿠키
- 웹 브라우저에서 서버로 접속할 때 쿠키 대신 세션을 사용하는 이유는 쿠키에 비해 세션이 보안에 강하기 때문임
- 쿠키와 세션의 가장 큰 차이점은 웹 브라우저를 통해 서비스를 요청할 때 사용자의 정보가 저장되는 위치
- 쿠키는 서버의 자원을 전혀 사용하지 않지만 세션은 서버의 자원을 사용함
- 웹 서비스에 대한 요청 속도는 세션보다 쿠키가 더 빠르므로 쿠키와 세션의 선택은 주어진 개발 환경에 맞춰 사용하면 됨
세션 내장 객체 메소드
- 웹 브라우저에서 웹 서버에게 서비스를 요청할 경우 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 역할을 수행
- 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 |