์ธ์ (Session)
์ธ์ ์ด๋? (session)
: ํด๋ผ์ด์ธํธ์ ์น ์๋ฒ ๊ฐ์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ์ ์งํ๋ ๋ฐฉ๋ฒ
์ธ์ ์ ์ฌ์ฉํ๋ ์ฃผ์ ๊ธฐ๋ฅ
โข
์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๋ก๊ทธ์ธ ๊ด๋ฆฌ
โข
์ฅ๋ฐ๊ตฌ๋ ๋ฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ
์ธ์ ์๋ช ์ฃผ๊ธฐ
์ธ์
์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ดํธ์ ์ ์ํ ์๊ฐ๋ถํฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข
๋ฃํ๋ ์์ ๊น์ง ์ ์ง๋ฉ๋๋ค.
โข
๋ก๊ทธ์ธ ์ ๋ณด๋ ์ธ์
์ ๋ฑ๋ก๋๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ ํ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ํญ์ ์ข
๋ฃํ๊ณ ๋ค์ ์ฌ์ดํธ์ ์ ์ํ๋ฉด ๋ก๊ทธ์์์ด ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
โข
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ, ์ ์ํฌ๋ฆฟ ์ฐฝ์ ์ด๋ฉด ๋ณ๋์ ์๋ก์ด ์ธ์
์ผ๋ก ํ
์คํธ ํด๋ณผ ์ ์์ต๋๋ค.
(โฆ > ์ ์ํฌ๋ฆฟ ์ฐฝ (Ctrl + Shift + N)
1.
์์ฑ (Creation)
: ํด๋ผ์ด์ธํธ๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ด๋ก ์ ์ํ๋ฉด, ์๋ฒ๋ ํด๋น ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์๋ก์ด ์ธ์
์ ์์ฑํฉ๋๋ค. ์ด๋ ๊ณ ์ ํ ์ธ์
์๋ณ์(ID)๊ฐ ์์ฑ๋๊ณ , ์ด ID๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์
์ ์๋ณํฉ๋๋ค.
2.
ํ์ฑํ (Activation)
: ์ธ์
์ด ์์ฑ๋๋ฉด ํ์ฑ ์ํ๊ฐ ๋๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ํ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ์ธ์
์ ํ์ฑํ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
3.
๋นํ์ฑํ (Inactivation)
: ์ธ์
์ ์ผ์ ์๊ฐ ๋์ ํ์ฑํ ์ํ๋ฅผ ์ ์งํ ํ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์์ ๊ฒฝ์ฐ ๋นํ์ฑํ ์ํ๋ก ์ ํ๋ฉ๋๋ค. ์ด๋, ์ธ์
์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋์ง ์๊ณ , ์ฌํ์ฑํ๋ ๋๊น์ง ๋๊ธฐํฉ๋๋ค.
4.
์ข
๋ฃ (Expiration)
: ์ธ์
์ด ๋ง๋ฃ๋๋ฉด ์ข
๋ฃ๋ฉ๋๋ค. ๋ง๋ฃ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ธ์
์ ๋ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์ ์ ์ง์ ๋ ์๊ฐ(์ธ์
ํ์์์)์ด ๊ฒฝ๊ณผํ ๊ฒฝ์ฐ์
๋๋ค. ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ธ์
์ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ๋ฌดํจํ(invalidate)ํ๋ ๊ฒฝ์ฐ์
๋๋ค.
5.
๊ฐ์ ์ข
๋ฃ (Forced Termination)
: ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์๋ ๊ด๋ฆฌ์๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ธ์
์ ์ง์ ๋ฌดํจํํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ์ธ์
์ ์ฆ์ ์ข
๋ฃ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ๋ค์ ์ธ์
์ ์์ฑํด์ผ ํฉ๋๋ค.
์ธ์ ๋ด์ฅ ๊ฐ์ฒด์ ์ฃผ์ ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช
|
getAttribute(String name) | ์ธ์
์์ ํน์ ์์ฑ์ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค. |
setAttribute(String name, Object value) | ์ธ์
์ ์๋ก์ด ์์ฑ์ ์ค์ ํ๊ฑฐ๋ ๊ธฐ์กด ์์ฑ์ ๊ฐ์ ์
๋ฐ์ดํธํฉ๋๋ค. |
removeAttribute(String name) | ์ธ์
์์ ํน์ ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค. |
getId() | ํ์ฌ ์ธ์
์ ๊ณ ์ ํ ์๋ณ์(ID)๋ฅผ ๋ฐํํฉ๋๋ค. |
setMaxInactiveInterval(int interval) | ์ธ์
์ ๋นํ์ฑ ์๊ฐ ์ ํ์ ์ค์ ํฉ๋๋ค. |
getMaxInactiveInterval() | ์ธ์
์ ๋นํ์ฑ ์๊ฐ ์ ํ์ ๋ฐํํฉ๋๋ค. |
invalidate() | ํ์ฌ ์ธ์
์ ๋ฌดํจํ์ํค๊ณ ์ธ์
์ ๋ชจ๋ ์์ฑ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค. |
isNew() | ํ์ฌ ์ธ์
์ด ์๋ก ์์ฑ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. |
getCreationTime() | ์ธ์
์ด ์์ฑ๋ ์๊ฐ์ ๋ฐํํฉ๋๋ค. |
getLastAccessedTime() | ์ธ์
์ ๋ง์ง๋ง์ผ๋ก ์ก์ธ์คํ ์๊ฐ์ ๋ฐํํฉ๋๋ค. |
์ธ์ ์์ฑ
session.setAttribute("userId", userId);
Java
๋ณต์ฌ
์ธ์ ์ ๋ณด
โข
๋จ์ผ ์ธ์
์ ๋ณด
session.getAttribute("userId");
Java
๋ณต์ฌ
โข
๋ค์ค ์ธ์
์ ๋ณด
Enumeration en = session.getAttributeNames();
int i = 0;
while (en.hasMoreElements()) {
i++;
name = en.nextElement().toString(); // ์ธ์
์์ฑ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ
value = session.getAttribute(name).toString(); // ์ธ์
์์ฑ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
out.println("์ค์ ๋ ์ธ์
์ ์์ฑ ์ด๋ฆ [ " + i + " ] : " + name + "<br>");
out.println("์ค์ ๋ ์ธ์
์ ์์ฑ ๊ฐ [ " + i + " ] : " + value + "<br>");
out.println("----------------------------------------------<br>");
}
Java
๋ณต์ฌ
์ธ์ ์ญ์
โข
๋จ์ผ ์ธ์
์ญ์
session.removeAttribute("userId");
Java
๋ณต์ฌ
โข
๋ค์ค ์ธ์
์ญ์
session.invalidate();
Java
๋ณต์ฌ
โข
์ธ์
์ ํจ ์ฌ๋ถ ํ์ธ
// isRequestedSessionIdValid
// : ํด๋น ์์ฒญ์ด ์ํ session ์ด ์ ํจํ์ง ์ฌ๋ถ๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
if (request.isRequestedSessionIdValid() ) {
out.print("์ธ์
์ด ์ ํจํฉ๋๋ค.");
} else {
out.print("์ธ์
์ด ์ ํจํ์ง ์์ต๋๋ค.");
}
Java
๋ณต์ฌ
์ธ์ ์ ํจ ์๊ฐ
โข
์ธ์
์ ํจ์๊ฐ ํ์ธ
// getMaxInactiveInterval()
// : ์ธ์
์ ์ ํจ์๊ฐ์ ๋ฐํํ๋ ๋ฉ์๋
int time = session.getMaxInactiveInterval() / 60;
out.println("์ธ์
์ ํจ ์๊ฐ : " + time + "๋ถ<br>");
Java
๋ณต์ฌ
โข
์ธ์
์ ํจ์๊ฐ ์ค์
// setMaxInactiveInterval()
// : ์ด ๋จ์๋ก ์ธ์
์ ์ ํจ์๊ฐ์ ์ค์ ํ๋ ๋ฉ์๋
session.setMaxInactiveInterval(60 * 60); // ์ ํจ์๊ฐ 60 ๋ถ์ผ๋ก ์ค์
Java
๋ณต์ฌ
์ธ์ ์ ๋ณด ๋ฑ๋กํ๊ธฐ
โข
session01.jsp
โข
session01_pro.jsp
โข
session01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ธ์
</title>
</head>
<body>
<h1>์ธ์
</h1>
<form action="session01_pro.jsp" method="post">
<p>์์ด๋ : <input type="text" name="username"/></p>
<p>๋น๋ฐ๋ฒํธ : <input type="password" name="password"/></p>
<p>
<input type="submit" value="๋ก๊ทธ์ธ" />
</p>
</form>
</body>
</html>
HTML
๋ณต์ฌ
โข
session01_pro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ธ์
๋ก๊ทธ์ธ</title>
</head>
<body>
<!-- ์ธ์
๋ฑ๋กํ๋ ๊ณผ์ -->
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if( username.equals("joeun") && password.equals("123456") ) {
// ์์ด๋, ๋น๋ฒ ์ผ์น -> ์ธ์ฆ(๋ก๊ทธ์ธ) ์ฑ๊ณต
// -> ์ธ์
์ ์ฌ์ฉ์ ์ ๋ณด ๋ฑ๋ก
session.setAttribute("username", username);
session.setAttribute("password", password);
out.println("์ธ์
์ค์ ์ฑ๊ณต! (๋ก๊ทธ์ธ ์ฑ๊ณต)");
out.println(username + "๋ ํ์ํฉ๋๋ค.");
}
else {
out.println("์ธ์
์ค์ ์คํจ! (๋ก๊ทธ์ธ ์คํจ)");
}
%>
<a href="<%= request.getContextPath() %>/session02.jsp">session02.jsp</a>
</body>
</html>
Java
๋ณต์ฌ
์ธ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
โข
session02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ธ์
์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ</title>
</head>
<body>
<h1>์ธ์
์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ</h1>
<%
String username = (String) session.getAttribute("username");
String password = (String) session.getAttribute("password");
out.println("์ธ์
์ ๋ณด - username : " + username);
out.println("์ธ์
์ ๋ณด - password : " + password);
%>
<div>
<a href="<%= request.getContextPath() %>/session03.jsp">session03.jsp</a>
</div>
</body>
</html>
HTML
๋ณต์ฌ