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
볡사