๐ค์ธ์
(Session) : ์๋ฒ(์นํ๋ก๊ทธ๋จ)์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ฅํ๋ ๊ฐ์ฒด - WAS ํ๋ก๊ทธ๋จ์ ์ํด ๊ด๋ฆฌ(WAS ์๋ฒ์์ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ด ์ฟ ํค์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ )
=> ๋ณด์ ๊ด๋ จ ์ ๋ณด(๊ถํ)๋ฅผ ์ธ์
์ ์ ์ฅํ์ฌ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์ด์ฉ
=> ์ธ์
์ ๊ตฌ๋ถํ๊ธฐ ์ํ ์๋ณ์(SessionId)๋ฅผ ์ด์ฉํด ํด๋ผ์ด์ธํธ์ ์ธ์
์ ๊ตฌ๋ถํ์ฌ ์นํ๋ก๊ทธ๋จ์๊ฒ ์ ๊ณต
โซ์ธ์
๋ฐ์ธ๋ฉ(Session Binding) : ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ์ธ์
์ ์นํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋๋ก ๊ฒฐํฉํ๋ ์์
- WAS ํ๋ก๊ทธ๋จ
๐ ์นํ๋ก๊ทธ๋จ์ ์ต์ด๋ก ์์ฒญํ ๊ฒฝ์ฐ
=> ํด๋ผ์ด์ธํธ๋ก๋ถํฐ [JSESSIONID]๋ผ๋ ์ด๋ฆ์ ์ฟ ํค๊ฐ์ ์ ๊ณต๋ฐ์ง ๋ชปํ ๊ฒฝ์ฐ ์๋ฒ์ ์๋ก์ด ์ธ์
์ ์์ฑํ์ฌ ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌํ๊ณ , ์์ฑ๋ ์ธ์
์ ์๋ณ์(SessionId)๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ [JSESSIONID]๋ผ๋ ์ด๋ฆ์ ์ฟ ํค๊ฐ์ผ๋ก ์ ๋ฌํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์ฅ
=> [JSESSIONID]๋ผ๋ ์ด๋ฆ์ ์ฟ ํค๋ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๊ฐ ์ข
๋ฃ๋๋ฉด ์๋ฉธ
๐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ [JSESSIONID]๋ผ๋ ์ด๋ฆ์ ์ฟ ํค๊ฐ์ ์ ๊ณต๋ฐ์ ๊ฒฝ์ฐ
=> ์ธ์
ํธ๋ํนํ์ฌ ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ
=> ์ธ์
ํธ๋ํน์ด ์คํจ๋ ๊ฒฝ์ฐ ์๋ก์ด ์ธ์
์ ์์ฑํ์ฌ ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ
*์ธ์ ํธ๋ํน(Session Tracking) : ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ [JSESSIONID]๋ผ๋ ์ด๋ฆ์ ์ฟ ํค๊ฐ๊ณผ ์๋ฒ์ ์ธ์ ์๋ณ์(SessionId)๋ฅผ ๋น๊ตํ์ฌ ๊ฒ์ํ๋ ์์
์ค์ต ์์ ๐ฉ๐ป
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
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;
//์ธ์
์ ๋ฐ์ธ๋ฉํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ธ๋ฉ๋ ์ธ์
์ ๋ณด๋ฅผ HTML ๋ฌธ์๋ก ์๋ตํ๋ ์๋ธ๋ฆฟ
@WebServlet("/session.itwill")
public class SessionServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//HttpServletRequest.getSession() : ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ๋์ด ์ ๊ณต๋ ์ธ์
์ HttpSession ๊ฐ์ฒด๋ก ๋ฐํํ๋ ๋ฉ์๋
// => ์๋ก์ด ์ธ์
์ ์์ฑํ์ฌ ๋ฐ์ธ๋ฉํ๊ฑฐ๋ ๊ธฐ์กด ์ธ์
์ ํธ๋ํนํ์ฌ ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ
//HttpSession ๊ฐ์ฒด : ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๋ ๊ฐ์ฒด(๊ฐ)๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด - ์ธ์
//๋ธ๋ผ์ฐ์ ๋ง๋ค ์ธ์
์ ๋ค ๋ค๋ฆ
HttpSession session=request.getSession();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='utf-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>์ธ์
(Session)/h1>");
out.println("<hr>");
//HttpSession.isNew() : HttpSession ๊ฐ์ฒด๋ฅผ ํธ๋ํนํ์ฌ ๋ฐ์ธ๋ฉํ ๊ฒฝ์ฐ [false]๋ฅผ ๋ฐํํ๊ณ
//HttpSession ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐ์ธ๋ฉํ ๊ฒฝ์ฐ [true] ๋ฐํ
if(session.isNew()) {
out.println("<p>์ธ์
์ ์์ฑํ์ฌ ๋ฐ์ธ๋ฉํ์์ต๋๋ค.</p>");
} else {
out.println("<p>์ธ์
์ ํธ๋ํนํ์ฌ ๋ฐ์ธ๋ฉํ์์ต๋๋ค.</p>");
}
//HttpSession.getId() : HttpSession ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์๋ณ์(SessionId)๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
out.println("<p>์ธ์
์๋ณ์(SessionId) ="+session.getId()+"</p>");
//HttpSession.getMaxInactiveInterval() : HttpSession ๊ฐ์ฒด๋ฅผ ์ ์งํ๊ธฐ ์ํ ์๊ฐ(์ด)์ ๋ฐํํ๋ ๋ฉ์๋
// => ์ธ์
์ ์ง์๊ฐ: ์ธ์
์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ์ธ์
์ด ์๋ ์๋ฉธ๋๋๋ก ์ค์ ๋ ์๊ฐ
// => ์ธ์
์ ์ ์ง์๊ฐ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก 30๋ถ ๋์ ์ ์ง๋๋๋ก ์ค์
out.println("<p>์ธ์
์ ์ง์๊ฐ ="+session.getMaxInactiveInterval()+"</p>");
//HttpSession.getCreationTime() : HttpSession ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์๊ฐ(TimeStamp)์ ๋ฐํํ๋ ๋ฉ์๋
out.println("<p>์ธ์
์์ฑ์๊ฐ ="+session.getCreationTime()+"</p>");
//HttpSession.setAttribute(String attributeName, Object attributeValue)
// => HttpSession ๊ฐ์ฒด(์ธ์
)์ ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฐ(๊ฐ์ฒด)์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ์๋
// => ๋งค๊ฐ๋ณ์์๋ ๊ฐ(๊ฐ์ฒด)๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์์ฑ๋ช
๊ณผ ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ ์์ฑ๊ฐ ์ ๋ฌ
// => ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์ ์์ฑ๋ช
๊ณผ ๊ฐ์ ์ด๋ฆ์ ์์ฑ๊ฐ์ด ์ธ์
์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ ๊ฒฝ์ฐ ๋ฎ์ด ์์ฐ๊ธฐ - ์์ฑ๊ฐ ๋ณ๊ฒฝ
// => ๋์ผ ํด๋ผ์ด์ธํธ๋ ์ธ์
์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์นํ๋ก๊ทธ๋จ์๊ฒ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ์ฌ ์ ๊ณต - ๊ฐ์ฒด ๊ณต์
session.setAttribute("now", new Date());
//HttpSession.getAttribute(String attributeName) : ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์ ์ด๋ฆ์ผ๋ก
//HttpSession ๊ฐ์ฒด(์ธ์
)์ ์ ์ฅ๋ ๊ฐ(๊ฐ์ฒด)์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ์๋
// => HttpSession ๊ฐ์ฒด์ ์ ์ฅ๋ ๋ชจ๋ ์์ฑ๊ฐ์ Object ๊ฐ์ฒด๋ก ๋ฐํ๋๋ฏ๋ก ๋ฐ๋์ ๋ช
์์ ๊ฐ์ฒด ํ๋ณํ ์ฌ์ฉ
// => ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์ ์์ฑ๋ช
์ ์์ฑ๊ฐ์ด ์๋ ๊ฒฝ์ฐ [null] ๋ฐํ
Date now=(Date)session.getAttribute("now");
out.println("<p>์ธ์
์ ์ ์ฅ๋ ์์ฑ๊ฐ(๊ฐ์ฒด) ="+now+"</p>");
//HttpSession.removeAttribute(String attributeName) : ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ์ ์ด๋ฆ์ผ๋ก
//HttpSession ๊ฐ์ฒด(์ธ์
)์ ์ ์ฅ๋ ๊ฐ(๊ฐ์ฒด)์ ์ญ์ ํ๋ ๋ฉ์๋
session.removeAttribute("now");
//HttpSession.invalidate() : ๋ฐ์ธ๋ฉ๋ ์ธ์
์ ์ธ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌํ ํ ์ญ์ ํ๋ ๋ฉ์๋
session.invalidate();
//HttpSession ๊ฐ์ฒด๋ฅผ ์ธ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌํ ํ HttpSession ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด IllegalStateException ๋ฐ์
//session.setAttribute("now", new Date());
out.println("</body>");
out.println("</html>");
}
}
์ฟ ํค์ ๋ํ ์ค๋ช โฌ๏ธ
2024.01.19 - [Servlet & JSP] - [Servlet]์ฟ ํค์ ์ธ์ (1) - ์ฟ ํค(Cookie)
[Servlet]์ฟ ํค์ ์ธ์ (1) - ์ฟ ํค(Cookie)
๐ค์ฟ ํค(Cookie) : ์๋ฒ(์นํ๋ก๊ทธ๋จ)์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ฐ๊ฒฐ ์ง์์ฑ์ ์ ๊ณตํ๊ธฐ ์ํ ์ ๋ณด๋ฅผํด๋ผ์ด์ธํธ์ ์ ์ฅํ๋ ๋ฌธ์๊ฐ ์ฟ ํค์ ์ธ์ ์ ๊ฐ ๊ฐ๋ , ๋์ ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํด๋์ ๋ธ๋ก๊ทธ
sukis.tistory.com