[Spring] 세션 설정, 확인, 삭제 및 쿠키와의 비교


쿠기와 세션의 차이

 

1. 세션

 

1) 서로 관련된 요청(request)들을 하나로 묶은 것을 말한다. 

 

– 쿠키를 이용한다.

– 브라우저마다 개별적인 저장소(session 객체)를 서버에서 제공한다.(브라우저:세션 = 1:1)

(a collection of related HTTP transactions made by one browser to on server)

– 쿠키는 브라우저에 저장되고 세션은 서버에 저장된다.

 

2) 쿠키는 정보를 클라이언트에 저장한 후 네트워크로 주고받기 때문에 민감한 정보를 다루기엔 위험하다.

3) 세션은 서버가 직접 관리하므로 민감한 정보를 다루기에 더 적합하다. ex) 로그인 정보 유지

4) 클라이언트가 웹브라우저를 통해 서버에 접속한 후 용무를 처리하고 웹 브라우저를 닫아 서버와의 접속 종료하는 하나의 단위를 세션이라고 한다.

5) 세션은 클라이언트가 서버에 접속해 있는 동안 그 상태를 유지하는 것이 목적이다.

6) 로그인 ~ 로그아웃까지가 하나의 세션이라고 생각하면 된다.

7) 클라이언트가 처음 접속한 후 웹 브라우저를 닫을 때까지 공유한다.

– 포워드나 페이지 이동 시에도 세션 영역은 소멸되지 않는다.

8) 세션은 브라우저마다 저장된다. 같은 PC라도 다른 브라우저라면 다른 세션 ID를 저장한다.




2. 세션 설정, 확인, 삭제

 

1) 유지 시간 설정

– 세션은 웹 브라우저를 실행할 때마다 새롭게 생성된다.

– 생성된 세션은 설정된 유지 시간동안 유지가 된다.

– 유지 시간이 만료되기 전에 새로운 요청이 들어오면 수명이 계속 연장된다.

– 만료 때까지 클라이언트가 아무런 요청을 하지 않거나 웹 브라우저를 닫으면 삭제가 된다.

 

– 방법 2가지

– web.xml에서 설정 : 분단위로 설정한다.
– session.setMaxInactiveInterval() : 초단위로 설정한다.

 

2) 설정값 확인

– JSESSIONID

– 생성한 적은 없으나 톰캣 컨테이너에서 새로운 웹 브라우저가 접속하면 세션을 유지하기 위해 자동으로 생성해준다.

– 이 JSESSIONID는 요청을 보낸 웹 브라우저가 현재 연결되어 있는지(세션이 살아있는지 확인하는데 이용된다.

 

3) 세션 삭제

– 웹 브라우저를 닫으면 종료된다.

– 웹 브라우저 설정에서 모든 쿠키를 삭제해 세션을 삭제하는 방법도 있다.

3. 동작 방식

 

1) 웹 브라우저가 처음 접속하면 서버(톰캣)는 세션을 생성한다. 응답 시 세션 아이디를 값으로 갖는 JSESSIONID 쿠키를 응답 헤더(response header)에 담아서 웹 브라우저에 보낸다.

2) 웹 브라우저는 재요청 시마다 JSESSIONID가 요청 헤더(request header)에 추가하여 보낸다.

3) 서버는 요청 헤더에 포함된 JSESSIONID로 해당 요청이 기존 세션에서 이어진 것임을 알게 된다.




4. 세션

 

1) 같은 세션ID를 사용한다는 것은 같은 세션 저장소(세션 객체)를 사용할 수 있는 것이다.

 

2) 처리과정

– 클라이언트가 요청을 하면 서버가 세션ID를 쿠키에 담아 응답한다.
– 브라우저로 요청하면 서버는 세션(저장소)을 무조건 생성한다.
– 세션 객체마다 갖고 있는 것은 세션ID이다.
– 그 다음 요청부터는 앞서 응답된 쿠키가 자동으로 따라간다.
– 두 번째 요청부터 같은 세션이다. 쿠키로 서버에 계속 같이 전송된다.
– 요청에 세션이 꼬리표로 붙어서 가는 것이다.(구별이 된다.)
– 원래 각 요청이 독립적이다.(서로 관련이 없다는 의미)
– 여기에 쿠키를 이용해서 세션ID를 발급하여 이 요청들에 공통점이 있게 되는 것이다.(그룹화)

3) 프로그램에서 세션 객체를 사용할 수 있다.

 

(1) 세션 끝내는 방법

 

* 수동 종료 : invalidate()

– 로그아웃, 세션 객체 제거(즉시 종료)

 

* 자동 종료 : timeout

– 요청과 요청 사이의 시간이 30분이 넘으면 클라이언트 요청 시 서브는 새로운 세션 ID를 응답 헤더에 담아서 응답한다.

– 새로운 세션ID가 발급된다는 것은 새로운 세션 객체가 만들어진 것이다.

– 기존 세션 객체는 삭제된다.

– timeout 동안은 서버에 세션 객체가 남아있어야 하므로 서버 부담이 크다.

– 세션 객체는 삭제처리가 된다 하더라도 서버에 오랫동안 남아있을 수도 있다.

– 세션이 끝나고나면 새로운 세션 ID가 발급된다. 그다음부터는 새로운 세션이 시작된다.

 

(2) 세션 객체 얻기 : request.getSession();

 

– javax.servlet.http.HttpSession 타입

– HTTP session을 구현한 객체. 세션 정보를 저장에 사용한다.

 

(3) 세션 객체에 데이터 저정

– session.setAttribute(“키값”, 실제값);

 

(4) 세션 ID를 반환

– String getId()

 

(5) 세션 내에서 최근 요청을 받은 시간 반환

– long getLastAccessedTime()

 

(6) 새로 생성된 세션인지를 반환

– boolean isNew()

– request.getSession() 호출 후 사용

 

(7) 지정된 시간(초) 후에 세션을 종료 (예약 종료)

– void setMaxInactiveInterval(int interval)

 

(8) 예약된 세션 종료 시간 반환

– int getMaxInactiveInterval()



5. 쿠키 vs 세션

 

쿠키 세션
브라우저 저장 서버 저장
서버부담X 서버부담O
보안에 불리 보안에 유리
서버 다중화에 유리 서버 다중화에 불리

 

[Windows11]윈도우11 마우스 우클릭 윈도우10처럼 바꾸는법

 

[Windows11]윈도우11 마우스 우클릭 윈도우10처럼 바꾸는법

개인적으로 이런저런 멘트 붙이면서 글을 장황하게 늘어뜨려 작성하고 싶지 않기에 바로 본론으로 들어가겠습니다. CMD 실행하기 1 . win키 + R를 실행하여 cmd 검색하여 실행하기 2. 시작표시줄에

ozizo.tistory.com

[Spring]JSP 기본객체 저장소 객체 영역 DTO 자바빈즈 규약

 

[Spring]JSP 기본객체 저장소 객체 영역 DTO 자바빈즈 규약

1. JSP의 기본 객체 1) 생성없이 사용할 수 있는 객체를 말한다. 2) service() 메소드의 지역 변수(Local Variable)로 선언되어 있다. 3) JSP에서 선언없이 사용 가능하다. 2. JSP의 기본 객체 종류 1) request : 요

ozizo.tistory.com

[Spring] 관심사 분리, MVC pattern, 컴포넌트 아키텍처, 프론트 컨트롤러

 

[Spring] 관심사 분리, MVC pattern, 컴포넌트 아키텍처, 프론트 컨트롤러

1. 관심사의 분리 (Separation of Concerns)와 계층화(Layering) 1) 관심이 같은 것은 한 곳으로 모으고, 다른 것은 따로 떨어뜨려 서로 영향을 주지 않도록 분리하는 것이다. 2) 복잡한 소프트웨어를 계층으

ozizo.tistory.com