-
HTTP,쿠키,세션jsp 2023. 5. 30. 00:46
HTTP?
HTTP는 stateless 무상태 프로토콜이다.
HTTP에 Request를 전송하면, 서버는 HTML파일을 전달(response)하고 연결을 해제 한다.
즉 요청-응답 후 연결이 끊기는 구조이기 때문에 사용자 입력 정보등 상태 정보 활용이 어려운 구조이다.
계속 상태를 유지하지 않기 때문에 리소스 낭비가 줄어드는 것이 큰 장점이지만, 통신할 때마다 새로 연결하기 때문에 클라이언트는 매 요청마다 인증을 해야 한다는 단점이 있다.
상태를 유지하지 않으면, 이전 요청과 현재 요청이 같은 사용자의 요청인지 모른다.
사용자 개별 장바구니와 같이 로그인을 일정 시간 유지해야 하는 작업을 수행해야할 때는 상태를 유지해야한다.
이때 사용되는 것이 쿠키와 세션 기법이다. 이 둘은 클라이언트와 웹 서버 간의 상태를 일정시간 지속적으로 유지하는 방법이다!
쿠키
정의1 : 쿠키는 클라이언트 로컬 pc에 저장되는 키와 값 형태의 작은 데이터 파일이다.
정의2 : 상태 정보(id=doy)를 클라이언트에 저장하는 방식이다.
- 사용자 인증이 유효한 시간을 정할 수 있고, 유효 시간이 정해지면 웹 브라우저를 종료하더라도 인증이 일정시간 유지된다.
- 클라이언트 일정 폴더에 저장하기 때문에 웹 서버 과부하를 줄일 수 있다.
- 웹사이트 관한 정보와 개인 정보가 기록되기 때문에 보안상 문제가 있다.
예를들어, 네이버를 처음 방문한 사용자가 로그인 인증을 처음으로 하고 나면, "아이디와 비밀번호를 저장하시겠습니까?" 라고 물어본다. "예"를 클릭하는 순간, 세션 ID가 포함된 쿠키! 가 만들어지고, 사용자의 로컬 pc에 저장된다. 다음부터 사용자가 네이버에 접속하면 쿠키를 사용하여 자동 로그인한다.
쿠키 동작 방식
1. client가 HTML 페이지를 웹 서버에 요청한다. (ex. 로그인 한다.)
2. 서버가 쿠키를 생성한다. 쿠키에는 세션ID값이 포함된다.
3. 서버가 응답할 때 HTTP헤더에 쿠키를 포함해서 전송한다. (Response header에 set-Cookie속성을 이용하면 클라이언트에 쿠키를 만들 수 있다. )
Set-Cookie: id= doy
4. 전달받은 쿠키는 웹 브라우저에서 관리하고 있다가, 다음 request할때 자동으로 함께 전송된다.
Cookie: id=doy //쿠키는 local pc에 키와 값 형태의 작은 데이터 파일로 저장된다.
5. 서버에서는 쿠키 정보를 통해 이전 상태 정보를 확인한다.
6. 필요시 서버가 쿠키정보를 업데이트해서 다시 response와 함께 쿠키를 전달한다.
상태정보가 클라이언트에 저장되어있음, 서버는 세션ID를 클라이언트에서 받아서 response하고 상태 유지한다. 쿠키 사용 예
- 아이디 비밀번호 저장
- 쇼핑몰 장바구니를 보여줄때 사용자 세션ID(쿠키)에 따라 개별적인 창 보여줌
세션
정의1 : 일정 시간 동안 같은 클라이언트로부터 들어오는 요청을 하나의 상태로 보고, 그 상태를 유지하는 기술이다.
정의2 : 상태 정보를 웹 서버에 저장하는 방식이다.
- 서버에서는 클라이언트를 구분하기 위해 , 각 클라이언트마다 각각 세션ID(쿠키)를 부여하고 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때 까지 인증상태를 유지한다.
예) 웹 쇼핑몰에서 장바구니나 주문처리와 같은 회원 전용 페이지의 경우 로그인 인증을 통해 사용 권한을 부여한다.(세션ID 전달) -> 다른 웹 페이지를 갔다가 다시 되돌아와도 로그인 상태가 유지되므로 회원 전용 페이지를 계속 사용할 수 있다. -> 이렇게 사용자 인증을 통해 특정 페이지를 사용할 수 있도록 권한 상태를 유지하는 것이 세션이다.
- 사용자 정보(id= doy)를 서버에 두기 때문에 쿠키방식보다 보안성이 뛰어나다. 데이터를 저장하는 데 한계가 없다.
- 사용자가 많아질 수록 서버 메모리를 많이 차지해, 동접자 수가 많은 경우 과부하가 발생할 수 있다.
네이버 웹사이트에서 로그인을 한다. -> 네이버 서버는 받은 아이디와 비밀번호 정보를 가지고 나에게 사용권한을 부여(세션ID가 저장된 쿠키를 전달 - jsessionID1)한다.-> 이 세션 ID를 통해 웹 브라우저는 네이버 서버에 요청을 할 떄마다 해당 세션ID를 함께 전송하여 내가 누구인지를 알린다. -> 네이버 서버는 세션ID를 통해 사용자를 식별하고 , 해당 세션에 저장된 정보를 참조하여 사용자 개인화된 정보를 제공한다. -> 만약 세션 유지 시간이 끝나거나 웹 브라우저를 닫는 경우 세션이 종료된다. -> 세션 종료 후에는 해당 세션ID로는 서버가 사용자를 식별할 수 없다. 너 누군데?? 이런상태,, 그래서 네이버 서버는 사용자를 재인증하도록 재로그인창을 표시한다. -> 재로그인을 하면 네이버 서버는 새로운 세션을 생성하고 사용자에게 새로운 세션ID(jsessionID2)를 제공한다. (세션을 유지한다? 나에게 부여된 세션 아이디를 서버에 request할때마다 같이 전송한다. 이러면 서버는 내가 누군지 알 수 있어서 내 정보를 유지한다.)
세션 동작방식
1. 웹브라우저가 서버에 요청한다.(ex 로그인한다.)
2. 서버가 해당 웹브라우저(클라이언트)에게 고유한 세션 ID(jsessionID)를 부여한다.
3. 서버가 응답할때 HTTP헤더에 세션ID를 포함해서 전송한다.
Set−Cookie: JSESSIONID=xslei13f
4. 웹 브라우저는 이후 웹 브라우저를 닫을 떄까지 , 다음 요청 때 (부여된 세션 ID가 담겨있는) 쿠키를 HTTP헤더에 넣어서 전송한다.
Cookie: JSESSIONID=xslei13f
5. 서버는 세션 ID를 확인하고, 해당 세션에 관련된 정보를 확인한 후 응답한다.
상태 정보는 서버에 저장되어 있고, 서버가 부여한 세션아이디는 클라이언트를 구분하는 역할을 한다. 클라이언트는 최소한의 정보만 가짐. 세션이 종료되고 다시 재로그인하면 새로운 세션ID가 클라이언트에게 부여됨. 세션 사용 예시
- 로그인 상태 유지
세션은 쿠키를 사용하여 값을 주고 받으며 클라이언트의 상태 정보를 유지하는 것이다. 상태 정보를 유지하는 수단은 -> 쿠키
쿠키와 세션의 차이점
저장 위치 ( 사용자의 상태 정보 )
쿠키 : 클라이언트
세션 : 서버, 세션아이디만 쿠키에 저장
보안
쿠키 : 사용자의 상태 정보가 클라이언트에 저장되어 보안 취약함. 세션ID를 클라이언트에게 그냥 줘버림. 세션이 종료되어도 이는 로컬 pc에 유지됨.
세션 : 사용자의 상태 정보가 서버에 저장되어 보안성이 좋음. 세션ID를 클라이언트에게 주긴 하나, 이는 클라이언트를 구분하기 위한 용도이고 세션이 종료되면 사라짐. 실질적인 상태정보는 서버가 갖고 있는 형태가 됨.
라이프사이클
쿠키: 만료시간에 따라 브라우저를 종료해도 계속 남아있을 수 있다.
세션 : 만료시간을 정할 수 있지만, 상태정보가 서버에 기록되므로 브라우저 종료하면 만료시간에 상관없이 삭제된다.
속도
쿠키 : 클라이언트에 저장되어 서버 요청 시 빠르다.
세션 : 실제 저장된 정보가 서버에 있으므로 서버의 처리가 필요해 쿠키보다 느리다.
https://doooyeon.github.io/2018/09/10/cookie-and-session.html
쿠키(Cookie)와 세션(Session)
HTTP 프로토콜에서 상태를 유지하기 위한 기술인 쿠키와 세션의 개념과 차이점을 알 수 있다.
doooyeon.github.io
'jsp' 카테고리의 다른 글
[jsp] DB (0) 2023.06.09 MYSQL 기본명령어 (0) 2023.05.31 [jsp] 쿠키생성, 쿠키 정보 얻기, 쿠키 삭제 (0) 2023.05.24 [jsp] 유효성 검사 (3) 2023.04.25 [jsp] 파일 업로드 (0) 2023.04.25