JAVA/JSP
[JSP] Session
로아다
2023. 6. 23. 00:10
728x90
반응형
Http Session
- 클라이언트가 최초로 웹 서버에 접속하면 서버는 해당 클라이언트에게 세션 ID를 발급한다.
- 세션 ID는 클라이언트가 접속하는 데 사용한 웹 브라우저의 특정 부분(쿠키)에 보관된다. (다른 웹 브라우저로 서버에 접속하면 새로운 세션 ID를 발급받는다.)
- 웹 브라우저의 쿠키에 저장되어있는 세션 ID는 이후 클라이언트가 요청을 보낼 때마다 항상 함께 전송되어 세션 객체의 열쇠 역할을 한다.
- 세션 ID는 기본적으로 사용자의 웹 브라우저가 종료될 때 사라지도록 설정되어 있다.
- 세션 객체에 데이터를 추가하는 것은 서버의 자원을 동시 접속사 수 만큼 사용한다는 것이기 때문에 너무 많은 양의 데이터를 세션 영역에 저장하는 것을 지양해야 한다.
현재 세션 정보
<ul>
<li>SESSION ID: <%=session.getId() %></li>
<li>최초 접속 시간: <%=new Date(session.getCreationTime()) %></li>
<li>마지막으로 활동한 시간: <%=new Date(session.getLastAccessedTime()) %></li>
<li>미활동 시 세션 만료 시간: <%=session.getMaxInactiveInterval() %>초</li>
</ul>
현재 세션 영역의 데이터 목록 보기
<%
// Enumeration : 반복문을 돌릴 수 있는 인터페이스
Enumeration<String> names = session.getAttributeNames();
// session.Attribute의 모든 name과 value를 출력
while (names.hasMoreElements()) {
String name = names.nextElement();
out.print(String.format("%s=%s<br>", name, session.getAttribute(name)));
}
%>
세션 영역에 데이터 추가해보기
<div>
<form action="/chap04/session/add">
Key:
<select name="key">
<option value="appetite">에피타이저 선택</option>
<option value="main">메인 선택</option>
<option value="fruit">과일 선택</option>
<option value="dessert">디저트 선택</option>
</select>
Value: <input type="text" name="value" />
<button type="submit">추가</button>
</form>
</div>
package chap04.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/session/invalidate")
public class SessionInvalidateServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 세션 만료시키기
req.getSession().invalidate();
resp.sendRedirect("/chap04/session/index.jsp");
}
}
package chap04.servlet;
import java.io.IOException;
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("/session/add")
public class SessionAddServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String key = request.getParameter("key");
String value = request.getParameter("value");
// JSP에는 session 객체가 기본적으로 만들어져 있지만
// 서블릿에서는 직접 만들어야 한다.
HttpSession session = request.getSession();
session.setAttribute(key, value);
response.sendRedirect("/chap04/session/index.jsp");
}
}
728x90
반응형