Search

์„ธ์…˜ (Session)

์„ธ์…˜ (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
๋ณต์‚ฌ