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
반응형