728x90
세션 : 클라이언트의 요청에 따라 접속된 웹 서버와 가상으로 연결된 상태를 유지하도록 함
- 세션은 서버공간에서 생성되므로 보안 유지에 유리하지만 데이터를 저장하기 위한 한계성에 대한 문제는 존재
클라이언트와 웹 서버 간의 접속을 통해 생성된 세션
- 웹 서버 공간에 생성되는 객체로 웹 브라우저마다 하나씩 존재
- 네트워크 환경에서 여러 사용자 중 특정인에 대한 구분자의 역할 수행
- 세션을 통해 접속된 웹 브라우저를 닫기 전까지는 사용자 정보를 지속적으로 활용 가능
session 내장 객체 : 웹 브라우저에서 웹 서버에게 서비스를 요청할 경우, 요청한 웹 브라우저에 관한 정보를 저장하고 관리하는 역할, page 지시문 session 속성 true로 설정
setAttribut() 메소드 : 세션을 생성할 때 사용
session.setAttribute("사용할 세션의 이름", 세션의 속성 값);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 세션 생성 </title>
</head>
<body>
Home > 세션 생성하기
<hr>
<%
String u_id = request.getParameter("id");
String u_pw = request.getParameter("passwd");
if(u_id.equals("space") && u_pw.equals("123456"))
{
session.setAttribute("memberId", u_id);
session.setAttribute("memberPw", u_pw);
out.println("새로운 세션 생성 성공 ! <br>");
out.println("[ " + (String) session.getAttribute("memberId")
+ "(" +
(String) session.getAttribute("memberPw")
+ ") ]님이 입장하였습니다. ");
}
else
{
out.println("세션 생성 실패 ! <br>");
out.println("다시 시도해 보세요.");
}
%>
</body>
</html>
getAttribute() 메소드 : 세션에 저장된 하나의 세션 속성 이름에 대한 속성을 가져옴
- Object형이므로 반드시 강제 형변환 필요
- name 매개변수 선언하지 않으면 null 값 반환
String u_id = (String)session.getAttribute("memberId");
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 단일 세션 정보 </title>
</head>
<body>
Home > 단일 세션 정보 확인하기
<hr>
<%
String u_id = (String) session.getAttribute("memberId");
String u_pw = (String) session.getAttribute("memberPw");
out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>");
out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br>");
%>
</body>
</html>
getAttributeNames() 메소드 : 세션에 저장된 여러 개의 세션 속성 이름에 대한 속성을 가져옴
- Enumeration 객체 타입이므로 page 지시문 태그의 import 속성을 사용하여 java.util.Enumeration 을
설정해야 함
<%@ page import="java.util.Enumeration" %>
Enumeration en = session.getAttributeNames();
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 모든 세션 정보 </title>
</head>
<body>
Home > 모든 세션 정보 확인하기
<hr>
<%
String name = "";
String value = "";
Enumeration en = session.getAttributeNames();
int count=0;
while(en.hasMoreElements())
{
count++;
name = en.nextElement().toString();
value = session.getAttribute(name).toString();
out.println(count + ". 세션의 속성 이름 : [ " + name + " ] <br>");
out.println(count + ". 세션의 속성값 : [ " + value + " ] <br>");
}
%>
</body>
</html>
setMaxInactiveInterval() 메소드 : 세션의 유효시간을 설정할 때 사용
- 초단위, 기본값은 1,800초(30분)
- 세션의 유효시간이 0 or 음수 값일때 : 유효시간이 없는 상태임, 세션을 삭제 후에도 웹 서버에는 계속해서 남아있게 되어 메모리 부족 현상이 발생할 수 있음
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 세션의 유효시간 </title>
</head>
<body>
Home > 세션의 유효시간 출력하기
<hr>
-- 세션 유효시간 변경 전 -- <br>
<%
int s_time = session.getMaxInactiveInterval() / 60;
out.println("세션의 유효시간 : [ " + s_time + " 분 ] <br><br>");
%>
-- 세션 유효시간 변경 후 -- <br>
<%
session.setMaxInactiveInterval(60 * 5);
s_time = session.getMaxInactiveInterval() / 60;
out.println("세션의 유효시간 : [ " + s_time + " 분 ]");
%>
</body>
</html>
getId() : 세션 아이디 가져오기
getLastAccessedTime() : 세션에 접근한 마지막 시간
getCreationTime() : 세션에 접근한 최초의 시간
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 로그인 접속 후 세션 유지 시간 </title>
</head>
<body>
Home > 로그인 접속 후 세션을 유지한 시간 출력하기
<hr>
<%
String session_id = session.getId(); // 세션 ID
long last_time = session.getLastAccessedTime(); // 세션에 접근한 마지막 시간, 밀리세컨드
long start_time = session.getCreationTime(); // 세션에 접근한 최초의 시간, 1000ms = 1초
long keping_time = (last_time - start_time) / 60000; // 세션에 생성된 시간(분)
out.println("1. 세션 아이디 : [ " + session_id + " ] <br>");
out.println("2. 세션이 생성된 시간 : [ " + keping_time + " 분 ] <br>");
%>
</body>
</html>
removeAttribute() 메소드 : 단일 세션을 삭제할 때 사용
session.removeAttribute("삭제할 세션");
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 단일 세션 삭제 </title>
</head>
<body>
Home > 단일 세션 삭제하기
<hr>
-- 단일 세션 삭제 전 -- <br>
<%
String u_id = (String) session.getAttribute("memberId");
String u_pw = (String) session.getAttribute("memberPw");
out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>");
out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br><br>");
session.removeAttribute("memberId"); // 세션 "memberId" 삭제
%>
-- 단일 세션 삭제 후 -- <br>
<%
u_id = (String) session.getAttribute("memberId");
u_pw = (String) session.getAttribute("memberPw");
out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>"); // null 출력
out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br>"); // "123456" 출력
%>
</body>
</html>
inalidate() 메소드 : 다중 세션을 삭제할 때 사용
session.invalidate()
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 다중 세션 삭제 </title>
</head>
<body>
Home > 다중 세션 삭제하기
<hr>
-- 다중 세션 삭제 전 -- <br>
<%
String u_id = (String) session.getAttribute("memberId");
String u_pw = (String) session.getAttribute("memberPw");
out.println(" 1. 아이디 세션 속성값 : " + u_id + "<br>");
out.println(" 2. 비밀번호 세션 속성값 : " + u_pw + "<br>");
if(request.isRequestedSessionIdValid() == true)
{
out.println(" >> 유효한 세션입니다. <br><br>");
}
else
{
out.println(" >> 유효하지 않은 세션입니다.<br><br>");
}
session.invalidate(); // 모든 세션 삭제
%>
-- 다중 세션 삭제 후 -- <br>
<%
if(request.isRequestedSessionIdValid() == true)
{
out.println(" >> 삭제 후에도 유효한 세션입니다.<br><br>");
}
else
{
out.println(" >> 삭제되어 유효하지 않은 세션입니다.");
}
%>
</body>
</html>
728x90
'뒤끝 (Back-End)' 카테고리의 다른 글
[JSP] JDBC (0) | 2024.12.04 |
---|---|
[JSP] 데이터베이스 (2) | 2024.12.04 |
[JSP] 액션 태그 (0) | 2024.10.18 |
[JSP] request 내장 객체 (5) | 2024.10.16 |
[JSP] 폼 태그 (3) | 2024.10.14 |