세션(Session)은 사용자가 웹 사이트에 접속하여 브라우저를 닫을 때까지의 일련의 상호 작용을 나타낸다. 세션은 사용자가 웹 사이트에 접속할 때 시작되고, 사용자가 브라우저를 닫거나 일정 시간 동안 활동이 없을 때 종료된다.
이를 통해 사용자는 로그인한 상태를 유지하거나 쇼핑 카트에 물품을 추가하는 등의 작업을 수행할 수 있다. 세션은 주로 서버 측에서 관리되며, 각 세션에는 고유한 식별자가 부여되어 해당 세션과 관련된 정보를 식별할 수 있다.
JSP 문서에서 세션은 'session' 변수에 이미 저장되어 있다.
Request객체.getSession();
또는 Request객체.getSession(true);
Request객체.getSession(false);
Session객체.setAttribute("key값", 데이터값);
1. 세션 객체 구하기
2. 데이터 읽기
1개의 데이터를 읽을시 Session객체.getAttribute("key값");
모든 데이터를 읽을시 Session객체.getAttributeNames();
모든 데이터를 읽었을 때 반환값 자료형은 Enumeration 객체다.
getId()
, 세션을 구분하기 위한 고유한 값이며 이 값이 Cookie에 저장되어 사용됨getCreationTime()
getLastAccessedTime()
getMaxInactiveInterval()
(초단위) 1. 세션 객체 구하기
2. 세션 삭제하기
개별 세션 데이터 삭제시 Session객체.removeAttribute("삭제할 key값");
모든 세션 데이터 삭제시 Session객체.invalidate();
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="<%=request.getContextPath()%>/sessionAdd.do">Session 정보 저장하기</a><br><br>
<a href="<%=request.getContextPath()%>/sessionRead.do">Session 정보 확인하기</a><br><br>
<a href="<%=request.getContextPath()%>/sessionDelete.do">Session 정보 삭제하기</a>
</body>
</html>
SessionAdd.do
package kr.or.ddit.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionAdd.do")
public class SessionAdd extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
HttpSession session = request.getSession();
session.setAttribute("testSession", "연습용 세션");
session.setAttribute("userName", "홍길동");
session.setAttribute("age", 30);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Session 연습</title></head>");
out.println("<body>");
out.println("<h2>Session 데이터가 저장되었습니다.</h2><br><br>");
out.println("<a href='" + request.getContextPath() + "/basic/session/sessionTest01.jsp'>시작 문서로 이동하기</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
SessionRead.do
package kr.or.ddit.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionRead.do")
public class SessionRead extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
HttpSession session = request.getSession();
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Session 연습</title></head>");
out.println("<body>");
out.println("<h2>저장된 Session 데이터 확인하기</h2><hr>");
out.println("<h3>세션 데이터 1개 확인하기</h3>");
String sessionValue = (String)session.getAttribute("testSession");
if(sessionValue == null) out.println("<h3>'testSession'의 세션값이 없습니다.</h3>");
else out.println("<h3>testSession의 세션 값: " + sessionValue + "</h3>");
out.println("<hr>");
out.println("<h3>전체 세션 데이터 확인하기</h3>");
out.println("<ul>");
Enumeration<String> sessionKeys = session.getAttributeNames();
int cnt = 0;
while(sessionKeys.hasMoreElements()) {
cnt++;
String key = sessionKeys.nextElement();
out.println("<li>" + key + ": " + session.getAttribute(key) + "</li>");
}
if(cnt == 0) out.println("<li>세션 데이터가 하나도 없습니다.</li>");
out.println("</ul>");
out.println("<hr>");
out.println("<h3>세션 관련 정보 출력하기</h3>");
out.println("세션 ID: " + session.getId() + "<br>");
out.println("세션 생성 시간: " + session.getCreationTime() + "<br>");
out.println("세션 최근 접근 시간: " + session.getLastAccessedTime() + "<br>");
out.println("세션 유효 시간: " + session.getMaxInactiveInterval() + "<br><br>");
out.println("<a href='" + request.getContextPath() + "/basic/session/sessionTest01.jsp'>시작 문서로 이동하기</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
SessionDelete.do
package kr.or.ddit.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionDelete.do")
public class SessionDelete extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
HttpSession session = request.getSession();
// 개별 삭제
// session.removeAttribute("testSession");
// 세션 자체 삭제
session.invalidate();
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><meta charset='utf-8'><title>Session 연습</title></head>");
out.println("<body>");
out.println("<h2>Session 삭제하기</h2><br><br><hr>");
out.println("<a href='" + request.getContextPath() + "/basic/session/sessionTest01.jsp'>시작 문서로 이동하기</a>");
out.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
jsp
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%
String userId = (String)session.getAttribute("loginUser");
%>
<body>
<%
if(userId == null) {
%>
<form action="<%=request.getContextPath() %>/sessionLogin.do" method="post">
<table border="1" style="margin: 0 auto;">
<tr>
<td>ID: </td>
<td><input type="text" name="id" placeholder="ID를 입력하세요.">
</tr>
<tr>
<td>PASS: </td>
<td><input type="password" name="pw" placeholder="PASSWORD를 입력하세요.">
</tr>
<tr>
<td colspan="2" style="text-align: center;">
<input type="submit" value="Login">
</td>
</tr>
</table>
</form>
<%
} else {
%>
<h3><%=userId %>님 반갑습니다.</h3><br>
<a href="<%=request.getContextPath() %>/sessionLogout.do">로그아웃</a>
<%
}
%>
</body>
</html>
sessionLogin.do
package kr.or.ddit.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionLogin.do")
public class SessionLogin extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
HttpSession session = request.getSession();
if("admin".equals(id) && "1234".equals(pw)) {
session.setAttribute("loginUser", id);
}
response.sendRedirect(request.getContextPath() + "/basic/session/sessionLogin.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
sessionLogout.do
package kr.or.ddit.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionLogout.do")
public class SessionLogout extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate();
response.sendRedirect(request.getContextPath() + "/basic/session/sessionLogin.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}