WEB_Cookie & Session
๐ WEB
๐ Cookie & Session
http protocol ์ ํน์ง
- client ๊ฐ server ์ ์์ฒญ
- server ๋ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ํ client์ ์๋ต
- ์๋ต ํ ์ฐ๊ฒฐ ํด์ -> stateless
- ์ง์์ ์ธ ์ฐ๊ฒฐ๋ก ์ธํ ์์๋ญ๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฐ๊ฒฐ์ ํด์ ํ๋ค.
- ๊ทธ๋ฌ๋ client์ server๊ฐ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ ( ๋ก๊ทธ์ธ ์ ๋ณด ๋ฑ )
- ์ฆ client ๋จ์๋ก ์ํ ์ ๋ณด๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ Cookie ์ Session ์ด ์ฌ์ฉ๋๋ค.
- HTTP Protocol ์ ํน์ง ( ์ฝ์ ) ์ ๋ณด์ํ๊ธฐ ์ํด ์ฌ์ฉ
๐ Cookie
Cookie ๋ ๋ฌด์์ธ๊ฐ?
javax.servlet.http.Cookie
- ์๋ฒ์์ ์ฌ์ฉ์์ ์ปดํจํฐ์ ์ ์ฅํ๋ ์ ๋ณด ํ์ผ
- ์ฌ์ฉ์๊ฐ ๋ณ๋์ ์์ฒญ์ ํ์ง ์์๋ ๋ธ๋ผ์ฐ์ ๋ request ์ Request Header๋ฅผ ๋ฃ์ด ์๋์ผ๋ก ์๋ฒ์ ์ ์ก
- key ์ value ๋ก ๊ตฌ์ฑ๋๊ณ String ํํ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- Browser ๋ง๋ค ์ ์ฅ๋๋ ์ฟ ํค๋ ๋ค๋ฅด๋ค. ( ์๋ฒ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ์ฌ์ฉ์๋ก ์ธ์ํ๋ค. )
Cookie ์ ์ฌ์ฉ ๋ชฉ์
-
์ธ์
๊ด๋ฆฌ
์ฌ์ฉ์ ์์ด๋, ์ ์์๊ฐ, ์ฅ๋ฐ๊ตฌ๋ ๋ฑ์ ์๋ฒ๊ฐ ์์์ผ ํ ์ ๋ณด ์ ์ฅ -
๊ฐ์ธํ
์ฌ์ฉ์๋ง๋ค ๋ค๋ฅด๊ฒ ๊ทธ ์ฌ๋์ ์ ์ ํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค. -
ํธ๋ํน
์ฌ์ฉ์์ ํ๋๊ณผ ํจํด์ ๋ถ์ํ๊ณ ๊ธฐ๋ก
- ์ฌ์ฉ ์ ID ์ ์ฅ ( ์๋ ๋ก๊ทธ์ธ ) , ์ผ์ฃผ์ผ๊ฐ ๋ค์ ๋ณด์ง ์๊ธฐ, ์ต๊ทผ ๊ฒ์ํ ์ํ๋ค์ ๊ด๊ณ ์ ์ถ์ฒ, ์ผํ๋ชฐ ์ฅ๋ฐ๊ตฌ๋ ๋ฑ
Cookie ์ ๊ตฌ์ฑ ์์
-
์ด๋ฆ
์ฌ๋ฌ ๊ฐ์ ์ฟ ํค๊ฐ client์ ์ปดํจํฐ์ ์ ์ฅ๋๋ฏ๋ก ๊ฐ ์ฟ ๊ธฐ๋ฅผ ๊ตฌ๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ด๋ฆ -
๊ฐ
์ฟ ํค์ ์ด๋ฆ๊ณผ ๋งคํ๋๋ ๊ฐ -
์ ํจ๊ธฐ๊ฐ
์ฟ ํค์ ์ ํจ๊ธฐ๊ฐ -
๋๋ฉ์ธ
์ฟ ํค๋ฅผ ์ ์กํ ๋๋ฉ์ธ -
๊ฒฝ๋ก(path)
์ฟ ํค๋ฅผ ์ ์กํ ์์ฒญ ๊ฒฝ๋ก
Cookie ์ ๋์ ์์
- Client ๊ฐ ํ์ด์ง๋ฅผ ์์ฒญ
- WAS๋ Cookie ๋ฅผ ์์ฑ
- HTTP Header์ Cookie๋ฅผ ๋ฃ์ด ์๋ต
- Browser๋ ๋๊ฒจ๋ฐ์ Cookie๋ฅผ PC์ ์ ์ฅํ๊ณ ๋ค์ WAS ๊ฐ ์์ฒญํ ๋ ์์ฒญ๊ณผ ํจ๊ป Cookie๋ฅผ ์ ์ก
- Browser๊ฐ ์ข ๋ฃ๋์ด๋ Cookie์ ๋ง๋ฃ ๊ธฐ๊ฐ์ด ๋จ์ ์๋ค๋ฉด Client๋ ๊ณ์ ๋ณด๊ด
- ๋์ผ ์ฌ์ดํธ ์ฌ๋ฐฉ๋ฌธ์ Client์ PC์ ํด๋น Cookie๊ฐ ์๋ ๊ฒฝ์ฐ ์์ฒญ ํ์ด์ง์ ํจ๊ป Cookie๋ฅผ ์ ์ก
Cookie ์ ํน์ง
- ์ด๋ฆ, ๊ฐ, ๋ง๋ฃ์ผ ( ์ ์ฅ ๊ธฐ๊ฐ ์ค์ ), ๊ฒฝ๋ก ์ ๋ณด ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ํด๋ผ์ด์ธํธ์ ์ด 300๊ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ ์ ์๋ค.
- ํ๋์ ๋๋ฉ์ธ ๋น 20๊ฐ์ ์ฟ ํค๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ํ๋์ ์ฟ ํค๋ 4KB๊น์ง ์ ์ฅ๊ฐ๋ฅํ๋ค.
Cookie ์ ์ฃผ์ ๊ธฐ๋ฅ
-
์์ฑ
Cookie cookie = new Cookie(String name, String value); -
๊ฐ ๋ณ๊ฒฝ, ์ป๊ธฐ
cookie.setValue(String value);
String value = cookie.getValue(); -
์ฌ์ฉ ๋๋ฉ์ธ ์ง์ /์ป๊ธฐ
cookie.setDomain(String domain);
String domain = cookie.getDomain(); -
๊ฐ ๋ฒ์์ง์ /์ป๊ธฐ
cookie.setPath(String path);
String path = cookie.getPath(); -
cookie์ ์ ํจ๊ธฐ๊ฐ์ง์ /์ป๊ธฐ
cookie.setMaxAge(int expiry);
int expiry = cookie.getMaxAge();
cookie ์ญ์ : cookie.setMaxAge(0); -
์์ฑ๋ cookie๋ฅผ client์ ์ ์ก
response.addCookie(cookie); -
client์ ์ ์ฅ๋ cookie ์ป๊ธฐ
Cookie cookies[] = request.getCookies();
๐ Session
Session ๋ ๋ฌด์์ธ๊ฐ?
javax.servlet.http.HttpSession (Interface)
- ๋ฐฉ๋ฌธ์๊ฐ ์น ์๋ฒ์ ์ ์ํด ์๋ ์ํ๋ฅผ ํ๋์ ๋จ์๋ก ๋ณด๊ณ ๊ทธ๊ฒ์ ์ธ์ ์ด๋ผ ํ๋ค.
- WAS์ memory์ Object์ ํํ๋ก ์ ์ฅ
- memory๊ฐ ํ์ฉํ๋ ์ฉ๋๊น์ง ์ ํ ์์ด ์ ์ฅ ๊ฐ๋ฅ
- ์ฌ์ฉ ์ site๋ด์์ ํ๋ฉด์ ์ด๋ํด๋ ๋ก๊ทธ์ธ ์ด ํ๋ฆฌ์ง ์๊ณ ์ ์ง, ์ฅ๋ฐ๊ตฌ๋
Session ์ ๋์ ์์
- Client ๊ฐ ํ์ด์ง๋ฅผ ์์ฒญ
- ์๋ฒ๋ ์ ๊ทผํ ํด๋ผ์ด์ธํธ์ Request-Header ํ๋์ธ Cookie๋ฅผ ํ์ธํ์ฌ, ํด๋ผ์ด์ธํธ๊ฐ ํด๋น session-id๋ฅผ ๋ณด๋๋์ง ํ์ธ
- session-id๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, ์๋ฒ๋ session-id๋ฅผ ์์ฑํด ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ ค์ค๋ค.
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋๋ ค์ค session-id๋ฅผ ์ฟ ํค๋ฅผ ์ฌ์ฉํด ์๋ฒ์ ์ ์ฅ, ์ฟ ํค ์ด๋ฆ : JESSIONID
- ํด๋ผ์ด์ธํธ๋ ์ฌ ์ ์ ์, ์ด ์ฟ ํค๋ฅผ ์ด์ฉํ์ฌ session-id ๊ฐ์ ์๋ฒ์ ์ ๋ฌ
Session ์ ํน์ง
- ์น ์๋ฒ์ ์น ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅ
- ์น ์๋ฒ์ ์ ์ฅ๋๋ ์ฟ ํค ( = ์ธ์ ์ฟ ํค)
- ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋ ์๋ฒ์์ ์ธ์ ์ ์ญ์ ํ์ ๋๋ง ์ญ์ ๊ฐ ๋๋ฏ๋ก, ์ฟ ํค๋ณด๋ค ๋น๊ต์ ๋ณด์์ด ์ข๋ค.
- ์ ์ฅ ๋ฐ์ดํฐ์ ์ ํ์ด ์๋ค.
- ๊ฐ ํด๋ผ์ด์ธํธ ๊ณ ์ Session ID๋ฅผ ๋ถ์ฌํ๋ค.
- Session ID๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ถํ์ฌ ๊ฐ ํด๋ผ์ด์ธํธ ์๊ตฌ์ ๋ง๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
Session ์ ์ฃผ์ ๊ธฐ๋ฅ
-
์์ฑ
HttpSession session = request.getSession();
HttpSession session = request.getSession(false); -
๊ฐ ์ ์ฅ
session.setAttribute(String name, Object value); -
๊ฐ ์ป๊ธฐ
Object obj = session.getAttribute(String name); -
๊ฐ ์ ๊ฑฐ
session.removeAttribute(String name); ํน์ ์ด๋ฆ์ ์์ฑ์ ๊ฑฐ
session.invalidate(); binding ๋์ด์๋ ๋ชจ๋ ์์ฑ ์ ๊ฑฐ ( ์์ฃผ ์ฌ์ฉ ) -
์์ฑ ์๊ฐ
long ct = session.getCreationTime(); -
๋ง์ง๋ง ์ ๊ทผ ์๊ฐ
long lat = session.getLastAccessedTime();
Cookie & Session ์ ๋ฆฌ
Session | Cookie | |
Type | javax.servlet.http.HttpSession (Interface) | javax.servlet.http.Cookie |
์ ์ฅ ์์น | Server์ memory์ Object๋ก ์ ์ฅ | Client ์ปดํจํฐ์ file๋ก ์ ์ฅ |
์ ์ฅ ํ์ | Object ๋ ๋ชจ๋ ๊ฐ๋ฅ ( ์ผ๋ฐ์ ์ผ๋ก Dto, List ๋ฑ ์ ์ฅ ) |
file์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ String ํํ |
์ฌ์ฉ ์ | ๋ก๊ทธ์ธ ์ ์ฌ์ฉ์ ์ ๋ณด, ์ฅ๋ฐ๊ตฌ๋ ๋ฑ | ์ต๊ทผ ๋ณธ ์ํ ๋ชฉ๋ก, ์์ด๋ ์ ์ฅ, ์ค๋์ ๊ทธ๋ง ์ด๊ธฐ |
์ฉ๋ ์ ํ | ์ ํ ์์ | ๋๋ฉ์ธ๋น 20๊ฐ, 1์ฟ ํค๋น 4KB |
๋ง๋ฃ ์์ | ์์ ์์ ( Client ๊ฐ ๋ก๊ทธ์์ ํ๊ฑฐ๋ ์ผ์ ์๊ฐ ๋์ session ์ ์ ๊ทผํ์ง ์์ ๊ฒฝ์ฐ, ๋ง๋ฃ์๊ฐ์ web.xml์์ ์ค์ ํ๋ค. ) |
์ฟ ๊ธฐ ์ ์ฅ์ ์ค์ ( ์ค์ ์์ ๊ฒฝ์ฐ browser ์ข ๋ฃ ์ ๋ง๋ฃ ) |
๊ณตํต | ์ ์ญ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ Project ๋ด์ ๋ชจ๋ JSP์์ ์ฌ์ฉ๊ฐ๋ฅ, MAP ํ์์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ Key ๊ฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค. |
Cookie & Session ๋ง๋ฌด๋ฆฌ
Cookie ์ Session ์ ๋ํด ์์ ๋ณด์๋ค.
Cookie ์ Session ์ ๋น์ทํ ์ญํ ์ ํ๊ณ ๋์์๋ฆฌ๋ ๋น์ทํ๋ค. ์ธ์
๋ ๊ฒฐ๊ตญ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ Cookie ๋ ์๋ฒ๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๊ณ Session ์ ์๋ฒ์ ์์์ ์ฌ์ฉํ๋ ํฐ ์ฐจ์ด์ ์ ๊ฐ์ง๊ณ ์๋ค.
Session ์ด ๋ณด์์ ์ผ๋ก๋ ์ ๋ฆฌํด์ Session ์ ์ฌ์ฉํ๋ฉด ๋์ง ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง ๋ฌด๋ถ๋ณํ Session ์ฌ์ฉ์ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐจ์งํ๊ฒ ๋๊ณ ๊ทธ๋ ๊ฒ ๋๋ฉด ์๋๊ฐ ๋๋ ค์ง ์ ์์ผ๋ฏ๋ก ์ ์ ํ๊ฒ Session ๊ณผ Cookie ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ ์ฅ ์์น์ ๋ณด์ ๋ง๊ณ ๋ ์ฐจ์ด์ ์ด ๋ผ์ดํ ์ฌ์ดํด์ด ์๋ค.
Cookie๋ ์ฟ ํค ์ ์ฅ ์ ์ค์ ํ๋ ๋ง๋ฃ์๊ฐ์ด๋ ์ค์ ์ด ์์ผ๋ฉด browser ์ข
๋ฃ ์ ๋ง๋ฃ ๋๊ณ
Session์ Client ๊ฐ ๋ก๊ทธ์์ ํ๊ฑฐ๋ ์ผ์ ์๊ฐ๋์ Session์ ์ ๊ทผํ์ง ์์ ๊ฒฝ์ฐ ๋ง๋ฃ๋๋ค. ๋ง๋ฃ ์๊ฐ์ web.xml์์ ์ค์ ํ๋ค.
Cookie์ Session์ด ๋น์ทํ ์ ์ด ๋ง์์ ์ฐจ์ด์ ์ ์ ์๊ณ ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.