JAVA. 세션이란?
세션이란?
서로 관련된 (독립적인)요청들을 하나라 묶은 것 - 쿠키 browser마다 개별 저장소 (session 객체)를 서버에서 제공
Session은 영구적이고 상호작용적인 정보를 교환을 전재하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결 상태를 의미하는 보안적인 다이얼로그 및 시간대를 가리킨다. - 나무위키
"a collection of realted HTTP transactions made by one browser to one server"
즉 클라이언트와 서버 간의 연결상태를 의미한다.
좀 더 구체적으로 설명하자면 클라이언트가 브라우저에 접속하여 __서버와의 접속이 종료되기 전의 상태__를 의미한다.
이미지 출처:https://raonctf.com/essential/study/web/session_connection
세션의 목적
1.네트워크의 연결성
네트워크에서는 사실 모든 요청은 독립적이기 때문에, 요청과 응답 사이에 두 시스템이 연결되어 있다는 것을 증명할 어떤 장치가 있어야 연결이 유지 되었다 할 수 있다. 만약 연결을 위한 정보가 없다면, 다으모가 같은 문제가 발생하게 된다.
- 연결된 정보가 없다면, 통신의 연속성이 없다.
- 연결 정보는 연결이 되어 있고, 연결한 사용자가 누구인지에 대한 정보가 들어있다.
- 이러한 정보가 없다면, 통신하고 있는 주체가 누구인지 언제부터 통신했는지 알수 없다.
- 연결 정보가 없다면, 현재 인터넷에서 우리가 사용한 것과 같은 연속적인 통신이 어렵다.
- 연결을 수시로 수행하면, 서버에 부담이 된다.
- 연결이 연속적이지 않다고 하여, 계속 다시 연결을 시도하면, 서버에 부필요한 연산작업이 늘어난다.
2. 세션을 통해 서버내에 연결정보를 남긴다.
사용자가 서버에 요청을 하면, 서버는 쿠키에 세션정보를 담아서 보내주고, 그후부턴, 프론트는 자동적으로 세션 정보를 쿠키에 담아 보내게 된다. 그러면 두번째 부터는 같은 세션을 보내게 되고, 이떄부터 같은 세션Id를 쓰게 되므로 그룹을 사용할수 있게 된다.
- 연결이 연속적이지 않다고 하여, 계속 다시 연결을 시도하면, 서버에 부필요한 연산작업이 늘어난다.
세션과 관련된 메서드
- String getId(): 세션의 ID를 반환
- long getLastAccessedTime(): 세션 내에서 최근 요청을 받은 시간을 반환
- boolean isNew(): 새로 생성된 세션인지를 반환. request.getSession() 호출 후 사용
- void invalidate(): 세션 객체를 제거(저장된 객체도 함께) // 즉시 종료
- void setMaxInactiveInterval(int interval): 지정된 시간후에 세션 종료(예약 종료)
-
int getMaxInactiveInterval(): 예약된 세션 종료 시간을 반환
- void setAttribute(String name, Object value): 지정된 값(value)를 지정된 속성 이름(name)으로 저장
- Object getAttribute(String name): 지정된 이름(name)으로 저장된 속성의 값을 반환
- void removeAttribute(String name): 지정된 이름(name)의 솟성을 삭제
세션의 종료
- 수동 종료
HttpSession session = request.getSession(); session.invalidate(); // 세션 즉시 종료 session.setMaxInactiveInterval(30*60); // 예약 종료(30분 후)
- 자동 종료 - web.xml ```java
```
쿠키 vs 세션
- 저장위치
- 쿠키: 브라우저
- 세션: 서버
- 서버에 부담정도
- 쿠키: x
- 세션: 서버에 부담
- 보안
- 쿠키: 보안에 불리
- 세션: 보안에 유리
- 서버 다중화
- 쿠키: 서버 다중화에 유리
- 세션: 서버 다중화에 불리
쿠키를 허용하지 않는 브라우저
- 쿠키 생성을 허용하지 않는 브라우저에서는 서버에서 Set-Cookie 를 해주어도, 쿠키가 생성되지 않는다, 이럴때 세션을 사용하기 위해선 브라우저 단 get요청 URL 에모든 세션정보를 전달하도록 해야한다.
session=false
자원을 아끼기 위해 session 의 시작 을 컨트롤 한다.
- session=true: 세션있을때 세션을 안만듬, 세션 없을때, 세션 생성 (default 값)
- session=false: 세션있을때 세션을 안만듬, 세션 없을때, 생성 x
세션이 필요없는 화면에 session=false 를 한다. session false가 있다 하여, 기존 session 에는 영향을 미치지 않는다.
request.getHeader(“refer”): from 정보 request.getRequestURL(): to 정보