언어/자바

쿠키(Cookie)와 세션(Session)

토킹포테토 2022. 11. 22. 13:23
728x90

1. 쿠키와 세션은 왜 사용할까?

: HTTP 프로토콜은 conncertionless , stateless 성질을 가지기 때문에 서버는 클라이언트가 누군지 매번 확인해야 하는데,

 이 같은 점을 보안하기 위해  쿠키와 세션이 사용된다.

 

만약 쿠키와 세션이 없다면 영화표를 예매하려 페이지에서 로그인을 했음에도 다른 페이지로 이동할 때마다 계속 로그인을 해야 하는 상황이 일어날 수 있다.

 

*connectionless : 클라이언트 요청(request) -> 서버 응답(response) 후 연결 끊음.

*stateless : 통신이 끊나면 상태 유지하지 않음.

 

2. 쿠키 ( Cookie ) 

: 클라이언트(브라우저) 로컬에 저장되는 데이터 파일 ( 키와 값이 들어있음)

 

2-1. 쿠키의 동작 방식

1. 클라이언트의 페이지 요청

2. 서버에서 쿠키 생성

3. HTTP 헤더에 쿠키를 포함시켜 응답

4. 클라이언트가 보관

5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄

6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키 업데이트하여 변경된  쿠키를 HTTP 헤더에 포함시켜 응답.

 

2-2. 쿠키 사용해보기

* 팝업 창 오늘 하루 보지 않기

<script type="text/javascript">
function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
    /* 
       쿠키 문자열 구조
       쿠키키=쿠키값; path=/; expires=Sat, 22 Oct 2022 11:46:04 GMT;
    */
}

$(function(){
	if(getCookie("notToday")!="Y"){
        $("#layer").fadeIn();
    } 

     $("#btn_close").click(function(){
        $("#layer").fadeOut();
     });

     $("#btn_nclose").click(function(){
        setCookie('notToday','Y', 1);
        $("#layer").fadeOut();

     });
 });
</script>

<div id="layer" class="layer-wrap">
   <div class="pop-layer">
     <div class="pop-container">
       <div class="pop-conts">
         <!--content //-->
         <h3>팝업창</h3>
         <p id="security_mark"> </p>
         <p class="ctxt mb20">
           - 내용 1
           <br>
           <br>
           - 내용 2
           <br>
           <br>
           - 내용 3   
    		<br>
           <br>
         </p>
         <div class="btn-r">
           <button type="button" class="button button2" id="btn_nclose">오늘하루 그만보기</button>
           <button type="button" class="button button2" id="btn_close">닫기</button>
         </div>
       </div>
     </div>
   </div>
 </div>

 

3. 세션( Session )

: 클라이언트(브라우저)에 저장하는 쿠키와 달리 세션은 서버 측에서 관리.

  보안 측면에서 쿠키보다 안전. 하지만 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨.

 

3-1. 세션의 동작 방식

1. 클라이언트가 서버에 접속 시 세션 ID를 발급받음.

2. 클라이언트는 세션 ID에 대해 쿠키를 사용하여 저장.

3. 클라이언트가 서버에 요청 시, 쿠키의 세션 ID를 같이 서버에 전달하여 요청.

4. 서버는 세션ID를 받아 이것으로 세션에 있는 클라이언트 정보를 가져와 이용한다.

5. 클라이언트 정보를 가지고 서버 요청을 처리 및 응답.

 

* 세션 생성

HttpSession session = request.getSession(true);

 : HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로이 세션을 생성합니다

HttpSession session = request.getSession(false);

 : HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로이 생성하지 않고 그냥 null을 반환합니다

 

*세션에 값 저장

session.setAttribute(String 이름, Object 값)

 

*세션 값 조회

String SessionVal = (String)session.getAttribute("세션이름");

 

*세션 삭제

session.removeAttribute("세션이름");

*세션의 모든 데이터 삭제

session.invalidate(); 

 

'언어 > 자바' 카테고리의 다른 글

[JAVA] indexOf(특정 문자 위치 찾기)  (0) 2023.03.17
[JAVA IO]FileInputStream & FileOutputStream  (0) 2023.03.09
AES256 암호화, 복호화  (0) 2022.10.25
자바 특수 문자, 정규식 처리  (0) 2022.10.24
JSON 이란?  (0) 2022.10.24