본문 바로가기

java/jsp & sevlet

[jsp&servlet] cookie, session

원레 http request는 stateless하다.

즉, 요청과 응답이 돌아오면, 이후로 클라이언트는 서버와의 연결이 끊기므로 서버는 클라이언트를 기억하지 못한다. 이는 리소스를 해제함으로써 서버의 부하를 방지하지만, 로그인처럼 클라이언트의 권한을 서버에서 기억해야 할 때는 다른 방법이 필요하다.

이 때 사용되는 것이 cookie와 session이다.

 

cookie


쿠키는 클라이언트의 요청에 자동으로 탑재되어 서버로 보내진다. 따라서 여기에 인증 정보를 담아놓을 수 있다.

하지만 보안에 취약하여 탈취 위험성이 크고 용량이 작아서 보안상으로 덜 민감한 간단한 정보만 저장하거나 만료기간을 지정한다.

 

보통은 사용자가 쿠키를 조작하지 못하도록. 서버의 인증 과정 추가한다

  • 서버 세션에 사용자 정보와 연결수단으로서 쿠키를 일시 저장
  • 사용자 요청 시 세션 내 쿠키 존재 여부 조회
  • HttpOnlySecure와 같은 쿠키 옵션
  • 최근 브라우저에서는 SameSite 쿠키 속성을 사용하여 CSRF 공격을 방어

 

코드 

서버단에서 getCookiesfor in , getName, getValue로 쿠키 검사. 없을 시 new Cookie 부여하거나 리다이렉트

 

session


여기서 세션이란 클라이언트의 session storage가 아니라 서버 측에서 웹 컨테이너가 생성하는 것을 의미한다.

세션은 쿠키보다 보안상 안전하다.

참고로. session 객체는 jsp 파일의 내장 객체이므로, 선언 없이 바로 사용 가능

 

코드

requset.getSession()

session.getAttribute()

session.setA

 

session.invalidate();

사용자와 연결된 세션만 유효하지 않게 만들어 파괴?