COOKIE 세션SESSION 필요성은 

 

 HTTP의 특징이자 약점을 보완하기 위해서이다.

그렇다면 이 HTTP의 특징은 무엇이고, 그로 인한 약점은 무엇일까?

 

HTTP 프로토콜

HTTP(Hypertext Transfer Protocol)는 인터넷 상에서 데이터를 주고받기 위해 서버 · 클라이언트 모델을 따르는 통신 규약이다. 이 HTTP 프로토콜의 특징은 비연결성(Connectionless)과 비상태성(Stateless)이다.

  1. 비연결성(Connectionless) : HTTP는 클라이언트가 서버에 요청을 보내면, 서버는 클라이언트에게 요청에 맞는 응답을 해 준 뒤 접속을 끊는다. 이에 대해서는 논란이 되는 부분이 있으나 여전히 접속을 끊음으로써 연결 비용을 줄이는 것이 HTTP의 장점이기 때문에 비연결성을 가지고 있다고 말한다.
  2. 비상태성(Stateless) : 상태 정보를 유지하지 않고. 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나게 되며, 상태 정보는 유지하지 않는다.

https://sunrise-new-world.tistory.com/21

 

1. 쿠키 Cookie  


상태가 없는 프로토콜을 위해 상태를 지속시키기 위한방법
웹 브라우저( 클라이언트) 의 정보를 웹 브라우저에 저장하므로,
이후 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 같이 포함되서 전송된다.

 

ex) 자동로그인, 로그인 상태 유지
비번, 아이디 저장 팝업

 

* 쿠키의 2가지 방식
- 파일 쿠키 : 실제 파일로 남겨서 저장하는 방식

- 웹 쿠키 : 브라우저가 관리

 

 

 

1) 쿠키 동작 방식

 

 

2) 쿠키의 구성

       * 이름       : 각 쿠키를 구별하는데 사용되는 이름. (알파벳, 숫자 이용)
       * 값       : 쿠키의 이름과 같이 저장할 데이터.
       * 유효시간    : 쿠키가 유지되는 시간.
       * 도메인    : 쿠키를 전송할 도메인.
       * 경로       : 쿠키를 전송할 요청 경로.

      - 하나의 브라우저는 여러 개의 쿠키를 가질 수 있고 구분할 때, 이름을 사용.
       - 각 쿠키는 값을 가지며 서버는 이 값을 사용해 작업 수행.

3) 쿠키 생성
       쿠키를 사용하려면 Cookie 클래스를 사용하여 쿠키 객체를 생성해야함
       쿠키에는 각 웹 브라우저를 판별할 수 있는 정보 포함되어있음
       서버가 응답할때, response 객체에 실려 사용자 브라우저에 저장됨.
       정보 전달 방식은 Map(key, value) 형태이다.

       [ 쿠키 객체 생성 ]
Cookie cookie = new Cookie(String name, String value);

       [ 쿠키 유효기간 설정 ] ([ 도메인, path 도 설정])
cookie.setMaxAge(60);

       [ response 객체에 쿠키 추가]
reponse.addCookie(cookie);

name : 쿠키이름
value : 쿠키값

* 쿠키 생성후, 반드시 reponse 객체에 쿠키를 추가해야한다.
* value에 아스키코드가 아닌 값이 들어가야할때는 알맞은 방식으로 인코딩한다.

 

쿠키 클래스 메서드
String  getName() 쿠키 이름 가져오기
String getValue() 쿠키값 가져오기
void setValue(String value) 쿠키값 지정
void setDomain(String pattern) 이 쿠기가 전송될 서버 도메인 지정
String getDomain() 지정된 도메인 리턴
void setPath(String url) 이 쿠키를 전송할 경로 지정
String getPath() 지정된 경로 리턴
void getMaxAge() 쿠키 유효시간을 초단위로 지정.
음수로 입력할 경우 웹브라우저 닫을때 쿠키가 함께 삭제된다.
int getMaxAge() 쿠키 유효시간을 구함.

 

 

 쿠키 읽어오기

 

#1 쿠키 목록 얻기
존재하는 모든 쿠키 객체를 가져오려면
내장객체 request의 getCookies() 메서드를 사용해야함.

Cookie[] cookies =  request.getCookies();

#2. 쿠키 객체 정보 얻기
getName(), getValue() 이용해서 정보얻어야함.

 

 

 

쿠키 삭제

 setMaxAge(0)

 

 

쿠키는 삭제하는 기능을 별도로 제공하지 않고, 
쿠키 유효시간을 만료하면 삭제됨.
즉, setMaxAge(0) 으로 만들어 다시 저장되도록 응답으로 보내기

 

 

2. 세션 Session  
: 클라이언트와 웹 서버간의 상태를 지속적으로 유지하는 방법

 

 

 

세션 내부 객체
*Object getAttribute(String name) 세션에 저장된 속성명이 name인 값을 Object로 리턴
*void setAttribute(String name, Object value) 세션에 name 속성명으로 값 저장 (어떤 값이든 저장가능)
-> 브라우저가 종료되거나, 삭제할때까지 데이터 유지
*void  removeAttribute(String name)  //로그아웃 툴 1
속성명이 name인 속성셋을 삭제
*void  invalidate() //로그아웃툴 2
현재 세션에 저장된 모든 속성 제거
java.util.Enumeration getAttributeNames() 세션 속성명들을 Enumeration으로 리턴
long getCreationTime() 세션이 생성된 시간 리턴
long getLastAccessedTime() 웹 브라우저가 해당 세션에 마지막으로 접근한 시간 리턴
int getMaxInactiveInterval() 해당 세션을 유지하기 위한 세션 유지시간 리턴.
void setMaxInactiveInterval (int interval) 해당 세션을 유지하기 위한 세션 유지시간 초단위로 설정
default 1800초 (30분) 동안 로그인 유지됨

 

 

 

 

 

 

  쿠키(Cookie) 세션(Session)
저장 위치 방문자(클라이언트) 서버
용량 제한 도메인당 20개, 쿠키당 4KB이하 용량 제한 없음
저장 형식 text Object
만료 시점 쿠키 저장 시 설정 가능. 따로 설정하지 않을 경우, 브라우저가 종료될 때 만료 정확한 시점을 알 수 없음
보안 보안 취약

보안우수

 

 

 

 

+ Recent posts