세션 트랙킹
- HTTP 프로토콜은 서버-클라이언트 통신시 stateless방식으로 통신
- 즉 브라우저에서 새 웹페이지 열면 기존의 웹 페이지나 서블릿에 관한 어떤 연결 정보도 알 수 없음
- 따라서 세션 트랙킹을 이용해서 웹 페이지 간의 연결 기능을 구현함
<hidden>
태그와 URL ReWriting
- 쿠키와 세션
<hidden>
태그와 URL ReWriting의 문제점
- 웹 페이지가 많아지면 일일이 로그인 정보를 전송해야 함
- GET방식으로 전송하므로 보안에 취약함
- 그래서 간단한 정보를 주고받을 때 좋음, 로그인은 웬만하면 세션을 이용함
쿠키
- 웹 페이지들 사이의 공유 정보를 클라이언트pc에 저장해놓고 사용하는 방법
- 특징
- 정보가 클라이언트pc에 저장됨
- 저장 정보 용량에 제한이 있음(파일 용량은 4kb)
- 보안이 취약함
- 클라이언트 브라우저에서 사용 유무를 설정할 수 있음
- 도메인당 쿠키가 만들어짐(웹사이트당 하나의 쿠키)
- 쿠키 기능 실행 과정
- 브라우저로 사이트에 접속
- 서버는 정보를 저장한 쿠키를 생성
- 생성된 쿠키를 브라우저로 전송
- 브라우저는 서버로부터 받은 쿠키 정보를 쿠키 파일에 저장
- 브라우저가 다시 접속해 서버가 브라우저에게 쿠키 전송을 요청하면 브라우저는 쿠키 정보를 서버에 넘겨줌
- 서버는 쿠키 정보를 이용해 작업을 함
- 쿠키 API 특징
- javax.servlet.http.Cookie 를 이용
- HttpServletResponse의 addCookie() 메서드를 이용해 클라이언트 브라우저에 쿠키를 전송한 후 저장
- HttpServletRequest의 getCookie() 메서드를 이용해 쿠키를 서버로 가져옵니다.
세션(Session)
- 웹 페이지들 사이의 공유 정보를 서버의 메모리에 저장해 놓고 사용하는 방법
- 특징
- 정보가 서버의 메모리에 저장
- 브라우저의 세션 연동은 세션 쿠키를 이용
- 쿠키보다 보안에 유리
- 서버에 부하를 줄 수 있음
- 브라우저(사용자)당 한 개의 세션(세션id)이 생성됨
- 세션은 유혀 시간을 가짐(기본 유효시간은 30분)
- 로그인 상태 유지 기능이나 쇼핑몰의 장바구니 담기 기능 등에 주로 사용됨
- 세션 기능 실행 과정
- 브라우저로 사이트에 접속
- 서버는 접속한 브라우저에 대한 세션 객체를 생성
- 서버는 생성된 세선id를 클라이언트 브라우저에 응답
- 브라우저는 서버로부터 받은 세션id를 브라우저가 사용하는 메모리의 세션 쿠키에 저장
- 브라우저가 재접속 하면 브라우저는 세션쿠키에 저장된 세션id를 서버에 전달
- 서버는 전송된 세션id를 이용해 해당 세션에 접근하여 작업을 수행
- 세션 얻는 방법
- 서블릿에서 HttpSession 클래스 객체를 생성해서 사용
- HttpSession 객체는 HttpServletRequest의 getSession()메서드를 호출해서 얻음
- getSession() 종류
- getSession() : 기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성
- getSession(true) : 기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성
- getSession(false) : 기존의 세션 객체가 존재하면 반환하고, 없응면 null을 반환
세션 유효시간 제어
- setMaxInactiveInterval() 메서드를 이용해서 유효시간 변경 가능
- 톰캣의 경우 web.xml에서 수정 가능
- invalidate() 세션 강제 제거
쿠키허용 해제 되있었을 때
mariadb에서 아이디 비번 조회
- select case when count(*)=1 then 'true else 'false' end as result from t_member where id="kim" and pwd="1234";
서블릿 속성과 스코프
- ServletContext : 다른 브라우저에서도 attribute 공유
- HttpSession : 다른 브라우저에서 attribute 공유 불가능
- request : 서블릿마다 request가 다르므로 아예 공유 불가능
URL 패턴
- 서블릿 매핑 시 사용되는 가상의 이름
- 클라이언트가 브라우저에서 요청할 때 반드시 / 로 시작해야함
- 이름까지 일치, 디렉터리까지 일치, 확장자만 일치하는 세가지로 나뉨
- 디렉터리 명 > 확장자 순으로 적용
필터(Filter)
- 브라우저에서 서블릿에 요청하거나 응답할 때 미리 요청이나 응답과 관련해 여러 가지 작업을 처리하는 기능
- 요청이나 응답 시 공통적인 작업을 처리하는데 이용됨
- 필터 용도
- 요청필터 : 사용자 인증 및 권한 검사 / 요청 시 요청 관련 로그 작업 / 인코딩 기능
- 응답필터 : 응답 결과에 대한 암호화 작업 / 서비스 시간 측정
- chain.doFilter(request, response); // 이걸 기준으로 위에있으면 요청필터 기능 아래는 응답필터 기능
- 필터 매핑 방법 : 애너테이션을 이용하는 방법 / web.xml에 설정하는 방법
리스너 (Listener API)
- 서블릿에서 발생하는 이벤트에 대해서 처리를 할 수 있는 기능