๋ชฉ์ฐจ
์ธ์ ๋ฉ์๋: Session Method
์๋ก
์น ๊ฐ๋ฐ์์ ์ธ์ ์ ์ฌ์ฉ์์ ์ํ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์งํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ธ์ ์ ํ์ฉํ์ฌ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด, ์ฅ๋ฐ๊ตฌ๋ ๋ด์ญ ๋ฑ์ ์๋ฒ์ ์ ์ฅํ๊ณ ์ ์งํจ์ผ๋ก์จ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. Java์์๋ ์ธ์ ์ ๋ค๋ฃจ๊ธฐ ์ํด ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฒ ๋ธ๋ก๊ทธ ํฌ์คํ ์์๋ Java์ ์ธ์ ๋ฉ์๋์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
์ธ์ ๋ฉ์๋ ์๊ฐ
Java์์ ์ธ์ ์ ๋ค๋ฃจ๊ธฐ ์ํด ์ฃผ์ํ ๋ฉ์๋๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
setAttribute(String name, Object value)
์ด ๋ฉ์๋๋ ์ธ์ ์ ์ง์ ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ค์ ํ๋ ์ญํ ์ ํฉ๋๋ค. ์ธ์ ์ ์ด๋ฆ-๊ฐ ์์ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ, ์ด ๋ฉ์๋๋ฅผ ํตํด ์ธ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์ด๋ฆ์ด 'John'์ด๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ ์ ์์ต๋๋ค.
session.setAttribute("username", "John");
getAttribute(String name)
์ด ๋ฉ์๋๋ ์ธ์ ์์ ์ง์ ํ ์ด๋ฆ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. setAttribute() ๋ฉ์๋๋ก ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ถ๋ฌ์ค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์์ ์ ์ฅํ ์ฌ์ฉ์ ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
String username = (String) session.getAttribute("username");
invalidate()
์ด ๋ฉ์๋๋ ์ธ์ ์ ๋น์ฐ๋ ์ญํ ์ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ํ ๋๋ ์ธ์ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
session.invalidate();
setMaxInactiveInterval(int interval)
์ด ๋ฉ์๋๋ ์ธ์ ์ ํ์์์์ ์ ์(์ด)๋ก ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ธ์ ์ ์ผ์ ์๊ฐ ๋ค์ ์๋์ผ๋ก ๋ง๋ฃ๋๋๋ฐ, ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ฃ ์๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ์ ์ 1์๊ฐ ๋์ ์ ์งํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์์ต๋๋ค.
session.setMaxInactiveInterval(3600); // 3600์ด = 1์๊ฐ
isNew()
์ด ๋ฉ์๋๋ ์ธ์ ์ด ์๋กญ๊ฒ ์์ฑ๋์๋์ง ํ์ธํ๋ ์ญํ ์ ํฉ๋๋ค. ์๋ก์ด ์ธ์ ์ด๋ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ์ด๋ฏธ ์ฌ์ฉ๋ ์ธ์ ์ด๋ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ ์ ์ด ์๋์ง๋ฅผ ํ๋จํ ์ ์์ต๋๋ค.
boolean isNewSession = session.isNew();
์์ธ ์ค๋ช
์ธ์ ๋ฉ์๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์งํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด์ ๊ฐ ๋ฉ์๋๋ค์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
setAttribute(String name, Object value)
์ธ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ setAttribute() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฉ์๋๋ ์ธ์ ์ ์ง์ ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ค์ ํฉ๋๋ค. ์ธ์ ์ ์ด๋ฆ๊ณผ ๊ฐ์ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ, ์ด๋ฆ์ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๊ธฐ ์ํ ๊ณ ์ ํ ํค(Key) ์ญํ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ธ์ ์ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
String username = "John";
session.setAttribute("username", username);
์์ ์ฝ๋์์ "username"์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ ์ด๋ฆ์ธ "John"์ด ์ธ์ ์ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ ๊ฒ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํด๋น ์ธ์ ์ ์ํ ๋ชจ๋ ํ์ด์ง๋ ์๋ธ๋ฆฟ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
getAttribute(String name)
์ธ์ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ถ๋ฌ์ค๊ธฐ ์ํด์๋ getAttribute() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ฉ์๋๋ ์ง์ ํ ์ด๋ฆ์ ๊ฐ์ฒด๋ฅผ ์ธ์ ์ผ๋ก๋ถํฐ ๊ฐ์ ธ์ต๋๋ค. ํ์ง๋ง ์ฃผ์ํด์ผ ํ ์ ์ getAttribute() ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฐ์ Object ํํ์ด๊ธฐ ๋๋ฌธ์, ์ค์ ๋ก ์ฌ์ฉํ๋ ค๋ ๋ฐ์ดํฐ ํํ๋ก ํ๋ณํ(Casting)ํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์์์ ์ ์ฅํ ์ฌ์ฉ์ ์ด๋ฆ์ ๋ค์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
String storedUsername = (String) session.getAttribute("username");
์์ ์ฝ๋์์๋ Object ํ์ ์ผ๋ก ๋ฐํ๋ ๊ฐ์ String์ผ๋ก ํ๋ณํํ์ฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ ๊ฒ ํ๋ฉด storedUsername ๋ณ์์ "John"์ด ํ ๋น๋ฉ๋๋ค.
invalidate()
์ธ์ ์ ๋น์ฐ๋ ๊ฒ์ ๋ก๊ทธ์์์ด๋ ์ธ์ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํ๊ณ ์ถ์ ๋ ์ ์ฉํ ๋ฉ์๋์ ๋๋ค. invalidate() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ํ์ฌ ์ธ์ ์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๊ณ , ์ธ์ ์ ๋ ์ด์ ์ ํจํ์ง ์๊ฒ ๋ฉ๋๋ค.
session.invalidate();
์์ ์ฝ๋๋ ํ์ฌ ์ธ์ ์ ๋น์ฐ๋ ์ญํ ์ ํฉ๋๋ค. ์ดํ์๋ ์๋ก์ด ์ธ์ ์ด ์์ฑ๋์ด์ผ ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
setMaxInactiveInterval(int interval)
์ธ์ ์ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ๋ง๋ฃ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Java์์๋ ์ธ์ ํ์์์์ด 30๋ถ์ผ๋ก ์ค์ ๋์ด ์์ต๋๋ค. ํ์ง๋ง setMaxInactiveInterval() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํ์์์ ๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ด ๋ฉ์๋๋ ์ธ์๋ก ์ ์(์ด ๋จ์)๋ฅผ ๋ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ธ์ ์ 1์๊ฐ ๋์ ์ ์งํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์์ต๋๋ค.
session.setMaxInactiveInterval(3600); // 3600์ด = 1์๊ฐ
์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ์ ์ 1์๊ฐ ๋์ ์ ์ง๋๋ฉฐ, ์ฌ์ฉ์๊ฐ 1์๊ฐ ๋์ ์๋ฒ์ ์ํธ ์์ฉ์ด ์๋ค๋ฉด ์ธ์ ์ด ์๋์ผ๋ก ๋ง๋ฃ๋ฉ๋๋ค.
isNew()
isNew() ๋ฉ์๋๋ ์ธ์ ์ด ์๋กญ๊ฒ ์์ฑ๋์๋์ง๋ฅผ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ก์ด ์ธ์ ์ด๋ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ์ด๋ฏธ ์ฌ์ฉ๋ ์ธ์ ์ด๋ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
boolean isNewSession = session.isNew();
์์ ์ฝ๋์์ isNewSession ๋ณ์๋ ์ธ์ ์ด ์๋กญ๊ฒ ์์ฑ๋์๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ ์ ์ด ์๋์ง๋ฅผ ํ๋จํ ์ ์์ต๋๋ค.
์์ฝ
์ด๋ฒ ํฌ์คํ ์์๋ Java์์ ์ ๊ณตํ๋ ์ธ์ ๋ฉ์๋์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ธ์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์์ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. setAttribute(), getAttribute() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ธ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ ํ์ตํ์ต๋๋ค. ๋ํ invalidate() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ ์ ๋น์ธ ์ ์์ผ๋ฉฐ, setMaxInactiveInterval() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ธ์ ์ ํ์์์ ๊ฐ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก isNew() ๋ฉ์๋๋ฅผ ํตํด ์ธ์ ์ด ์๋กญ๊ฒ ์์ฑ๋์๋์ง๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค.
์ธ์ ๋ฉ์๋๋ฅผ ์ ์ ํ ํ์ฉํจ์ผ๋ก์จ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. Java์์ ์ ๊ณตํ๋ ์ธ์ ๋ฉ์๋๋ค์ ์ ํ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ค ์์ ์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ๊ฐ๋ฐํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
์ฐธ๊ณ ์๋ฃ
์์
๋ค์์ ๋ก๊ทธ์ธ ํผ์ ์ ์ถํ์ฌ ์ฌ์ฉ์ ์ด๋ฆ์ ์ธ์ ์ ์ ์ฅํ๊ณ , ๋ค๋ฅธ ํ์ด์ง์์ ํด๋น ์ฌ์ฉ์ ์ด๋ฆ์ ๋ถ๋ฌ์ค๋ ์์ ์ ๋๋ค.
// ๋ก๊ทธ์ธ ํผ์ ์ ์ถํ์ฌ ์ฌ์ฉ์ ์ด๋ฆ์ ์ธ์
์ ์ ์ฅํ๋ ์๋ธ๋ฆฟ
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
// ์ธ์
๊ฐ์ ธ์ค๊ธฐ (์ ์ธ์
์์ฑ ๊ฐ๋ฅ)
HttpSession session = request.getSession(true);
// ์ฌ์ฉ์ ์ด๋ฆ ์ธ์
์ ์ ์ฅ
session.setAttribute("username", username);
// ๋ค๋ฅธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ
response.sendRedirect("welcome.jsp");
}
}
// ๋ค๋ฅธ ํ์ด์ง์์ ์ธ์
์ ์ ์ฅ๋ ์ฌ์ฉ์ ์ด๋ฆ ๋ถ๋ฌ์ค๋ ์๋ธ๋ฆฟ
@WebServlet("/welcome")
public class WelcomeServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ์ธ์
๊ฐ์ ธ์ค๊ธฐ (๊ธฐ์กด ์ธ์
์ฌ์ฉ)
HttpSession session = request.getSession(false);
// ์ธ์
์์ ์ฌ์ฉ์ ์ด๋ฆ ๋ถ๋ฌ์ค๊ธฐ
String username = (String) session.getAttribute("username");
// ์ฌ์ฉ์ ์ด๋ฆ์ ํ๋ฉด์ ์ถ๋ ฅ
response.getWriter().println("Welcome, " + username + "!");
}
}
์ด ์์ ์์๋ ๋ก๊ทธ์ธ ํผ์์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ ๋ ฅ๋ฐ์ ์ธ์ ์ ์ ์ฅํ๊ณ , ๋ค๋ฅธ ํ์ด์ง์์ ํด๋น ์ฌ์ฉ์ ์ด๋ฆ์ ๋ถ๋ฌ์์ ํ๋ฉด์ ์ถ๋ ฅํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ํ ๋๋ invalidate() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ธ์ ์ ๋น์์ฃผ๋ฉด ๋ฉ๋๋ค.
๋๊ธ