개발 공부/WEB

Session Tracking : 상태 정보 유지기술

공부하는개발자_ 2023. 7. 13. 16:05

 

SessionTracking : 상태 정보 유지기술 (쿠키/세션)

Cookie / Session / Storage

 

쿠키 : 클라이언트쪽 정보유지
세션 : 서버쪽 정보유지

 

 

왜 해야되는가? 

Http는 요청/응답/연결끊김의 구조이다.

클라이언트와 서버측에서 연결이 끊겨 있음. 계속 연결 되어 있는것 처럼 보일 필요가 있음.

로그인 성공 후 , 상품조회 , 장바구니 넣기를 이용하여 저장하려고 함.

 

서로 다른 서블릿

1.첫번째 서블릿을 요청하여 로그인 성공 응답을 받음

2. 장바구니 넣기 작업을 해서 장바구니 담기 성공 응답 받음

3. 결제하기를 또 다른 서블릿 요청 (로그인 성공한 사용자 / 로그인 안 한 사용자 구분 필요)

연결이 끊어진 구조이기 때문에 로그인 성공된 정보를 기억할 수 없음. 

(웹서버는 기억력이 없음) 

이럴 때 기억시키는 방법이 SessionTracking이다.

 

 

먼저 클라이언트측에 로그인성공된 정보를 기억시킴.

클라이언트측에서 요청할때 마다 서버에 보내면 된다.

 

로그인 성공 응답이 안된 경우, 결제할때 로그인 안한 사용자로 판단 할 수 있게 된다.

 

쿠키

응답된 쿠키는 요청할때마다 요청header에 실려 서버로 자동 전달

쿠키가 많을 수록 요청 요청속도 저하됨

브라우저에 저장되기 때문에 보안에 취약함

위험한 자료는 쿠키로 저장하면 안 됨  ex) 주민등록번호, 비밀번호..

이름과 값으로 저장됨. (많은 자료저장 불가) , 특수문자 불가, 값은 문자열로만 저장 가능 (255문자까지만 가능)

ex) 하루동안 보지 않기 

 

세션

로그인정보를 서버쪽에 자료를 저장하기 때문에 보안이 쿠키보다 안전

값의 유형 : Object타입으로 가능하기 때문에 많은 자료 저장 가능.

 

Cookie c = new Cookie("c1", "one");
// response.addCookie(c);

 

웹브라우저가 닫히면 사라짐

 

유효기간 설정을 해주게 되면, 브라우저를 닫아도 쿠키 사용 가능

 

 

 

 

쿠키를 삭제하고 싶으면,
setMaxAge(0); 

parameter에 0을 넣어주면 된다.

 

Storage 

Session Storage탭 단위로 관리 

local Stotrage웹브라우저 닫혀도 계속 쓸 수 있음 (Header에 실려가지 않음. cookie와 차이점)

굳이 서버에 저장할 목적이 아니라면  storage로 권장 (쿠키x) : ex) 아이디 저장

 

 

아이디 저장을 체크하면 저장한 아이디 값이 보이고, 로그인 후에 브라우저를 껐다 브라우저를 다시 열면

아이디 저장된 상태로 나옴.

 

 

 

request.getSession();

인터페이스 이기 때문에  request.getSession();으로 얻어 내야함(New keyword로 객체생성을 하면 안 됨)

요청한 클라이언트 JSession 전용 객체가 있는지 찾아보는 역할. 없는 경우 새로 만듦. (쿠키 생성)

 

JSession ID값(AAA)과 같은 id를 갖는 HttpSession객체가 있는지 확인 후 

없는경우 HttpSession객체 생성

HttpSession객체 반환을 getSession( ) 해줌

 

 

HttpSession : JSesion 멤버변수 id를 갖고 있음

 

 

보기에는 Session을 사용하는것으로 보이나, 내부에서는 쿠키를 사용.

결제요청 시 , 요청header에 JSession ID(AAA)값이 전달됨.

 

 

 

 

로그인 하지 않은 고객이 요청 시,

JSession ID값이 중복되지 않도록 확인 하는 역할은 엔진이 함.

세션은 엔진이 자동으로 만들어 주기때문에 소멸 되어야 한다.

 

객체는 언제 메모리에서 사라지는가?

최종사용 시간이 매번 세팅 되고, 30분 동안 사용하지 않으면 session객체는 소멸 된다.

강제로 객체를 소멸시키고 싶은 경우

최종 사용시간을 조절하고 싶은 경우 set inactive interval( )로 second단위로 조정가능

톰캣 서버로 시간 조절 하는 방법도 있다.

 

 

사용 안 하면 30분 뒤에 객체는 자동으로 사라짐

서블릿이 몇 개 만들어졌는지와 관계없이 클라이언트 별로 만들어지는 서버쪽의 객체 (session)

 

여러 명이 위의 ip로 접속하여 서블릿을 요청 한 경우, 각자의 객체가 생기는 것임.

session.setAttribute("loginedID", id); //로그인정보 유지하고 싶을 때

 

'개발 공부 > WEB' 카테고리의 다른 글

싱글톤패턴/ 파일 업로드  (1) 2023.07.19
session / MVC  (1) 2023.07.14
jsp / Servlet  (0) 2023.07.12
redirect / forward  (1) 2023.07.11
Servlet  (0) 2023.07.10