๐ŸŒฑBackend/Java

#15 JSP ์ฟ ํ‚ค์™€ ์„ธ์…˜

JiwonDev 2021. 7. 16. 18:53

# ์›น Cookie

HTTP Cookie ๋Š” ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ „์†กํ•˜๋Š” (ํ˜น์€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒ์„ฑํ•ด๋‚ธ) ์ž‘์€ ๋ฐ์ดํ„ฐ์ด๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์›น ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ฟ ํ‚ค๋ฅผ ํ—ค๋”์— ๋‹ด์•„ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฌด์ƒํƒœ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” HTTP ํ†ต์‹ ์—์„œ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์„ธ์…˜๊ด€๋ฆฌ (Session management) - ์„œ๋ฒ„์— ์ €์žฅํ•ด์•ผ ํ•  ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒŒ์ž„ ์Šค์ฝ”์–ด๋“ฑ์˜ ์ •๋ณด
  • ๊ฐœ์ธํ™” (Personalization) - ์‚ฌ์šฉ์ž ์„ ํ˜ธ, ํ…Œ๋งˆ๋“ฑ์˜ ์„ธํŒ…๊ฐ’์„ ์ €์žฅ
  • ํŠธ๋ž˜ํ‚น (Tracking) - ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ๊ธฐ๋กํ•˜๊ณ  ๋ถ„์„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ. (=์„œ๋“œํŒŒํ‹ฐ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•œ ๊ตฌ๊ธ€๊ด‘๊ณ )

HTTP ๋ฉ”์‹œ์ง€์ค‘ Header๋ถ€๋ถ„์— ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•˜์—ฌ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.


์ฐธ๊ณ ๋กœ Chrome ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฟ ํ‚ค๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ์ง€์›์„ ์ข…๋ฃŒํ•  ์˜ˆ์ •์ด๋‹ค. ์ด๋Š” ๊ฐœ์ธ์ •๋ณด ์œ ์ถœ๊ณผ ๋ณด์•ˆ์˜ ์ค‘์š”์„ฑ์ด ๋ถ€๊ฐ๋˜๋ฉฐ ๋‹ค๋ฅธ์‚ฌ์ดํŠธ์˜ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๋Š” [third-party cookie]์— ์•ˆ์ข‹์€ ์ธ์‹์ด ์ƒ๊ฒผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋งŒ ์ฟ ํ‚ค๋ฅผ ์—†์• ๋ฒ„๋ฆฌ๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ๊ด‘๊ณ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ์— ์ด์ œ ์ฟ ํ‚ค ๋Œ€์‹  ๋จธ์‹ ๋Ÿฌ๋‹์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฐ์ง‘ํ™”ํ•˜๋Š” ํ”Œ๋ก(FloC)์ด๋ผ๋Š” ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•  ์˜ˆ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค.


# Cookie์— ์ €์žฅ๋˜๋Š” ์ •๋ณด

ํด๋ผ์ด์–ธํŠธ ๋กœ์ปฌ์— ์ €์žฅ๋˜๋Š” Key, Value ๊ฐ’์œผ๋กœ HTTP Response Header์— Set-Cookie ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฟ ํ‚ค์—๋Š” ์ด๋ฆ„, ๊ฐ’, ๋งŒ๋ฃŒ ๋‚ ์งœ/์‹œ๊ฐ„ (์ฟ ํ‚ค์˜ ์ €์žฅ๊ธฐ๊ฐ„), ๊ฒฝ๋กœ์ •๋ณด๋“ฑ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

์ฟ ํ‚ค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•˜๊ณ ์žˆ๋‹ค๊ฐ€ ์š”์ฒญ(Request)ํ•  ๋•Œ ์ฐธ์กฐ๋œ๋‹ค. ๋ฉ”์„œ๋“œ ์‚ญ์ œ๊ธฐ๋Šฅ์€ ๋”ฐ๋กœ ์ œ๊ณตํ•˜์ง€์•Š๊ณ , ์ง€์ •๋œ ๋งŒ๋ฃŒ ๋‚ ์งœ/์‹œ๊ฐ„์„ ํ†ตํ•ด ์ฟ ํ‚ค๋ฅผ ์ผ์ •์‹œ๊ฐ„๋งŒ ์œ ์ง€ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

  • ์ฟ ํ‚ค ํ”„๋กœ์„ธ์Šค
    1. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›นํŽ˜์ด์ง€์— ์ ‘์†ํ•œ๋‹ค.
    2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์›นํŽ˜์ด์ง€๋ฅผ ์‘๋‹ต์œผ๋กœ ๋ฐ›์œผ๋ฉด์„œ HTTP ํ—ค๋”๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฟ ํ‚ค ๊ฐ’์„ ์‘๋‹ต์œผ๋กœ ์ค€๋‹ค. (์ด๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•œ๋‹ค.)
    3. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›นํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•œ ์„œ๋ฒ„์— ์žฌ ์š”์ฒญ์‹œ ๋ฐ›์•˜๋˜ ์ฟ ํ‚ค ์ •๋ณด๋„ ๊ฐ™์ด HTTP ํ—ค๋”์— ๋‹ด์•„์„œ ์š”์ฒญํ•œ๋‹ค.
    4. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)์—์„œ ์ฟ ํ‚ค ๊ฐ’์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์ฟ ํ‚ค ์‚ฌ์šฉ ์‚ฌ๋ก€
    • ์ž๋™๋กœ๊ทธ์ธ, ํŒ์—…์—์„œ "์˜ค๋Š˜ ๋” ์ด์ƒ ์ด ์ฐฝ์„ ๋ณด์ง€ ์•Š์Œ" ์ฒดํฌ, ์‡ผํ•‘๋ชฐ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ...
  • ์ฟ ํ‚ค์˜ ํ•œ๊ณ„ 
    • ํด๋ผ์ด์–ธํŠธ์— ์ตœ๋Œ€ 300๊ฐœ ๊นŒ์ง€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์„œ๋ฒ„ ๋„๋ฉ”์ธ ํ•˜๋‚˜๋‹น ์ตœ๋Œ€ 20๊ฐœ์˜ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜๋‚˜์˜ ์ฟ ํ‚ค ๊ฐ’์€ ์ตœ๋Œ€ 4KB๊นŒ์ง€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


# ์„ธ์…˜์ฟ ํ‚ค(Session)์™€ ์ง€์†์ฟ ํ‚ค(Persistent)

๋งŒ๋ฃŒ ๋‚ ์งœ/์‹œ๊ฐ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹คํ–‰์ค‘์ผ ๋•Œ (=๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ์žˆ์„ ๋•Œ)๋งŒ ์œ ํšจํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์„ธ์…˜์ฟ ํ‚ค์— ์ €์žฅ๋œ๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œ๋œ๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ์ง€์ •๋˜์–ด์žˆ๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ์œ ์ง€๋˜๋„๋ก ๋กœ์ปฌ์— ์ €์žฅ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ํƒˆ์ทจ, ๋ณ€์กฐ๋  ์œ„ํ—˜์ด ์žˆ์–ด ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ•˜๋‹ค.

 

์ฐธ๊ณ ๋กœ ํฌ๋กฌ์˜ ์ฟ ํ‚ค์˜ ๊ธฐ๋ณธ ์ €์žฅ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ € ์„ค์ •์—์„œ ์ง์ ‘ ์ฟ ํ‚ค๋ฅผ ์‚ญ์ œํ•  ์ˆ˜์žˆ๋‹ค..

Chrome
C:\Users\<yourusername>\AppData\Local\Google\Chrome\User Data\Default\Local

IE
<yourusername>\AppData\Roaming\Microsoft\Windows\Cookies

 


# ์‚ฌ์šฉ๋ฐฉ๋ฒ•

1) ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  response๊ฐ์ฒด์— ๋‹ด๋Š”๋‹ค.

Cookie cookie = new Cookie( "cookieName" , "cookieValue" );
response.addCookie( cookie );


2) ํŽ˜์ด์ง€๊ฐ€ ์ด๋™๋˜๋ฉด ์ฟ ํ‚ค๋Š” ํ—ค๋”์— ํฌํ•จ๋˜์–ด ๋‹ค๋ฅธ ํŽ˜์ด์ง€์— ์ „์†ก๋œ๋‹ค.

Cookie[] cookies = request.getCookies(); // ์ฟ ํ‚ค๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ฟ ํ‚ค๊ฐ€ ์—†์œผ๋ฉด null์„๋ฐ˜ํ™˜ํ•œ๋‹ค


3) ๋ฐ›์€ ์ฟ ํ‚ค๋ฐฐ์—ด์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
์ฐธ๊ณ ๋กœ ์ฟ ํ‚ค๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜๋Š” ์žˆ์œผ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋”ฐ๋กœ ์ œ๊ณตํ•˜์ง€์•Š๋Š”๋‹ค. ์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ฟ ํ‚ค์˜ ์œ ํšจ์‹œ๊ฐ„์„ 0์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

Cookie[] cookies = request.getCookies(); // request ๊ฐ์ฒด์—์„œ ์ฟ ํ‚ค๋ฅผ ๋ฐ›์•„์˜ด

for ( int i = 0 ; i < cookies.length ; i++){ // ๋ฐ›์•„์˜จ ์ฟ ํ‚ค๋“ค์„ ์ˆœํšŒ
    // ์ฟ ํ‚ค ์ˆ˜์ • (๋ฎ์–ด ์”Œ์šฐ๊ธฐ)
    if ( cookies[i].getName.equals( "NAME" ) ){ // ์ฟ ํ‚ค์ด๋ฆ„์ด NAME์ธ ์ฟ ํ‚ค ๊ฒ€์ƒ‰
        Cookie cookie = new Cookie( "NAME" , "๋ณ€๊ฒฝํ• ๊ฐ’" ); // ์ˆ˜์ •ํ•  ๋•Œ์—๋Š” ์ƒˆ๋กœ์šด ์ฟ ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด ๋ฎ์–ด์”Œ์šด๋‹ค.
        response.addCookie( cookie ); // ์ƒˆ๋กœ์šด ์ฟ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (ํ—ค๋”์— ์ €์žฅ๋จ)
    }
    // ์ˆ˜์ •์„ ์‘์šฉํ•œ ์ฟ ํ‚ค ์‚ญ์ œ. Cookie ๊ฐ์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ญ์ œ๊ธฐ๋Šฅ์€ ๋”ฐ๋กœ ์—†๋‹ค.
    if ( cookies[i].getName().equals("DELETE_NAME") ){
        Cookie cookie = new Cookie( "DELETE_NAME" , "์•„๋ฌด๊ฐ’" );
        cookie.setMaxAge( 0 ); // ์ฟ ํ‚ค ์œ ํšจ ์‹œ๊ฐ„์„ 0์œผ๋กœ ํ•œ ํ›„
        response.addCookie( cookie ); // ํ—ค๋”์— ์ฟ ํ‚ค ์ถ”๊ฐ€
}

 


# JSP์—์„œ์˜ ์ฟ ํ‚ค

<%
Cookie cookie = new Cookie("NAME","value");
response.addCookie(cookie);
%>
...
<body>
    <a href="bPage.jsp">์ด๋™</a>
</body>
// bPage.jsp

<%
  String name = "";
  String value = "";
  String cook = request.getHeader("Cookie");

  if ( cook != null ){
      Cookie[] cookies = request.getCookies();

      for( int i = 0 ; i< cookies.length ; i++){
          if( cookies[i].getName().equals("NAME") ){
              name = cookies[i].getName();
              value = cookies[i].getValue();
          }
      }
  }
%>
...
<body>
์ฟ ํ‚ค ๋ช… : <%=name%> 
์ฟ ํ‚ค ๊ฐ’ : <%=value%>
</body>

 


# Session

์„ธ์…˜์ด๋ž€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ผ์ •์‹œ๊ฐ„๋™์•ˆ ์‚ฌ์šฉ์ž(=๋ธŒ๋ผ์šฐ์ €)์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€์‹œํ‚ค๋Š” ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•œ๋‹ค. ์‹ค์ œ๋กœ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ณ„์† ํ™•์ธํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์›น ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜ ์•„์ด๋”” ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์„œ๋ฒ„์— ์œ ์ €์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ๋…ผ๋ฆฌ์ ์ธ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์œ ์ง€์‹œํ‚ค๋Š” ๊ฑฐ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

 

์„ธ์…˜์„ ์œ ์ง€์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ณดํ†ต์€ ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ธ์…˜ ID๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ID๋งŒ ์ฟ ํ‚ค๋กœ ์ฃผ์–ด์ง€๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ ์ •๋ณด๋“ค์€ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์ €์žฅ๋œ๋‹ค.


# Session ์œ ์ง€์˜ ์›๋ฆฌ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹ ์˜ ์›น์‚ฌ์ดํŠธ๋ฅผ ์ ‘์†ํ•  ๋•Œ ์„ธ์…˜ ID๋ฅผ ์›น ์„œ๋ฒ„์—์„œ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.
  • ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐœ๊ธ‰ํ•œ ์„ธ์…˜ID ๊ฐ’์„ ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์žฌ์ ‘์†์‹œ, ๋‚จ์•„์žˆ๋Š” ์„ธ์…˜ID ์ฟ ํ‚ค๊ฐ’์„ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜์—ฌ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

 

# Session ์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ ์œผ๋กœ๋Š” ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๊ณ ์œ  ID๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค. (ID๋Š” ์ฟ ํ‚ค์— ์ €์žฅ๋œ๋‹ค)
  • ์„ธ์…˜ ID๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€์‹œ์ผœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •๋ณด๋“ค์€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋Š” ID๋งŒ ๋ถ€์—ฌ๋˜๋Š” ๋ฐฉ์‹์ด๋ผ ๋ณด์•ˆ์„ฑ์ด ์ฟ ํ‚ค๋ณด๋‹ค ์šฐ์ˆ˜ํ•˜๋‹ค.
  • ๋‹จ์ ์œผ๋กœ๋Š” ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์ด๊ธฐ์— ์„œ๋ฒ„์— ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜์žˆ๊ณ  ๋ณ„๋„์˜ ์„ธ์…˜์ •๋ณด ์ €์žฅ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•œ๋‹ค.

 

# HTTP์—์„œ์˜ Session ๋™์ž‘์ˆœ์„œ

  • ํด๋ผ์ด์–ธํŠธ (์›น ๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์„œ๋ฒ„๋กœ ์ ‘์†์„ ์‹œ๋„ํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ request-header field์ธ ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•˜๊ณ  ์ฟ ํ‚ค์•ˆ์— session-id๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์ฟ ํ‚ค์— session-id๊ฐ€ ์—†๋‹ค๋ฉด, ์„œ๋ฒ„๋Š” ์ƒˆ๋กœ์šด id๋ฅผ ์ƒ์„ฑํ•ด ํด๋ผ์ด์–ธํŠธ์˜ response-header filed์ธ set cookie ๊ฐ’์œผ๋กœ session-id๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค.

# JSP์˜ ์„ธ์…˜

session ๊ฐ์ฒด ๋ฉ”์„œ๋“œ ์„ค๋ช…
session.setAttribute( "name" , "value" ); value๋ฅผ ์„ธ์…˜์œผ๋กœ ์ €์žฅ.
session.getAttribute( "name" ); ํ•ด๋‹น ์ด๋ฆ„์˜ session ๋ฐ˜ํ™˜
 session.getId(); ์„ธ์…˜์˜ ๊ณ ์œ  ์•„์ด๋”” ์ €์žฅ
session.getAttributeNames(); ์„ธ์…˜์˜ ๋ชจ๋“  name ๋ถˆ์–ด์˜จ๋‹ค. => Enumeration ๋Œ€์ž…
session.removeAttribute("name"); ์„ธ์…˜ ์‚ญ์ œ
session.invalidate(); ์ „์ฒด ์„ธ์…˜ ์ดˆ๊ธฐํ™”
// login.jsp
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");

if ( id.equals("abc") && pwd.equals("1234") ){
    session.setAttribute( "ID" , id );    // ๋ณ€์ˆ˜id๋ฅผ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ€์ง„ ID๋ผ๋Š” ์ด๋ฆ„์˜ ์„ธ์…˜ ์ƒ์„ฑ
    response.sendRedirect("loginOK.jsp");    // ์„ธ์…˜์„ ๊ฐ€์ง€๊ณ  ํŽ˜์ด์ง€ ์ด๋™
} else {
    response.sendRedirect("loginForm.jsp");    // ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋‹ค์‹œ ์ด๋™ ( ์ •๋ณด ์žฌ์ž…๋ ฅ ์š”๊ตฌ )
}
%>
...
์ƒ๋žต
// loginOk.jsp

<%
  Enumeration enumeration = session.getAttributeNames(); // ์„ธ์…˜์—์žˆ๋Š”๋ชจ๋“ ๋ฐ์ดํ„ฐ๋“ค์ด๋ฆ„์„๊ฐ€์ ธ์˜ด
  
  while( enumeration.hasMoreElements() ){  // enumeratioin ๊ฐ์ฒด์˜ ๋ชจ๋“  ์š”์†Œ๋“ค
    String sName = enumeration.nextElement().toString();
    String sValue = (String)session.getAttribute(sName);

    if ( sValue.equals("abc") ){
      out.println( sValue +" ๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์š”");
    }
  }

%>
...
<body>
   <a href="logout.jsp">๋กœ๊ทธ์•„์›ƒ ํ•˜๋Ÿฌ๊ฐ€๊ธฐ</a>
</body>
</html>
// logout.jsp

<%
    session.invalidate();
%>
...
<body>
    ๋กœ๊ทธ์•„์›ƒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
</body>

 


# ์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ์ฐจ์ด

์ฐธ๊ณ ๋กœ ์ฟ ํ‚ค, ์„ธ์…˜์€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋‚˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์บ์‹œ์™€๋Š” ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค.

์บ์‹œ๋Š” ์ž์›์„ ๋‹ค์‹œ loadํ• ๋•Œ ํ•ด๋‹น ์ž์›์„ ์„œ๋ฒ„์— ์š”์ฒญํ•˜์ง€ ์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ์ž์›์„(=์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ) ์žฌ์‚ฌ์šฉ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํ•ด๋‹น ์ž์›์ด ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ณ€๊ฒฝ ๋˜์–ด๋„ ๋‚จ์•„์žˆ๋Š” ์บ์‹œ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ์ž์›์„ ๊ณ„์† ์‚ฌ์šฉ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์ง€์›Œ์ฃผ๊ฑฐ๋‚˜, ์„œ๋ฒ„์—์„œ HTTP Header์— ์ž์› ์บ์‹œ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์ €์žฅํ•˜์—ฌ ํ•ด๊ฒฐํ•œ๋‹ค.

๋”๋ณด๊ธฐ

(Browser) Cache Memory

ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰๋  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ์ง€์—ญ์„ฑ์„ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋””์Šคํฌ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ๋‚ด์šฉ์„ ํŠน๋ณ„ํžˆ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ๋ณด๊ด€ํ•˜๊ณ  ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ์ด ๋‚ด์šฉ์„ ๋‹ค์‹œ ํ•„์š”๋กœํ•  ๋•Œ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฐธ์กฐํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‰ฝ๊ฒŒ ํ’€์–ด์„œ ์„ค๋ช…ํ•˜๋ฉด ์‚ฌ์šฉ๋˜์—ˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์‹œ ์‚ฌ์šฉ๋˜์–ด ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฐœ๋…์„ ์ด์šฉํ•œ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ๋‹ค์‹œ ์‚ฌ์šฉ๋  ํ™•๋ฅ ์ด ๋†’์€ ์•„์ด๋“ค์„ ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค.

 

์ฟ ํ‚ค

  • ์ €์žฅ : ํด๋ผ์ด์–ธํŠธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ (์œ ์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋กœ์ปฌ์— ์ €์žฅ)
  • ๋ณด์•ˆ : ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ธฐ์— ํƒˆ์ทจ, ๋ณ€์กฐ๊ฐ€ ์‰ฌ์›Œ ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ•˜๋‹ค.
  • ๋ผ์ดํ”„์‚ฌ์ดํด : ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•˜๋”๋ผ๋„ ๋กœ์ปฌ์— ์ €์žฅํ•˜์—ฌ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์†๋„ : ์„œ๋ฒ„๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ํด๋ผ์ด์–ธํŠธ ํ—ค๋”๋งŒ ์ฐธ์กฐํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์„ธ์…˜์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

 

์„ธ์…˜

  • ์ €์žฅ : ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฟ ํ‚ค๋กœ SessionID ์ „๋‹ฌ
  • ๋ณด์•ˆ : ํด๋ผ์ด์–ธํŠธ ์ •๋ณด๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด์žˆ๊ธฐ์— ๋ณด์•ˆ์ƒ ์•ˆ์ „ํ•˜๋‹ค.
  • ๋ผ์ดํ”„์‚ฌ์ดํด : ์„ธ์…˜ ์ฟ ํ‚ค๊ฐ€ ์—†์–ด์งˆ ๋•Œ ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค. (= ์„ธ์…˜์œ ํšจ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ๋ผ์ง)
  • ์†๋„ : ํด๋ผ์ด์–ธํŠธ ์ฟ ํ‚ค์— ๋ถ€์—ฌ๋œ ์„ธ์…˜ID๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ, ๋‹จ์ˆœ ์ฟ ํ‚ค ์‚ฌ์šฉ๋ณด๋‹ค ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ  ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.