<세션관리>
1. 세션 (접속시작 -> 접속 끊을 때 까지)
- 서버와 클라이언트 간의 지속적인 연결 상태를 가짐
- HTTP는 기본적으로 하나의 요청과 응답으로 처리
* connectionless/stateless
- 로그인, 장바구니 구현과 가은 세션 관리 기능 필요
* HttpSession 클래스를 이용한 세션 관리
* Cookie 클래스를 이용한 세션 처리
2. HttpSession 클래스를 이용한 세션 처리 방법 (세션은 정보가 서버에 있고, 쿠키는 정보가 클라이언트에 있다.)
- 세션
* 사용자의 상태 정보를 "서버에서 관리"하는 메커니즘
- 브라우저가 서버에 접속하면 세션 생성
- 브라우저가 종료할 때 세션 제거(?-> 사실은 알 수 없음.)
- Time-out을 정하고 이 기간동안 요청이 없으면 세션 제거(기본 30분)
세션은 브라우저에서 식별하는 정보이다.
3. 세션의 생성
- 세션은 브라우저가 접속할 때 자동으로 생성됨
4. 세션의 제거방법
- time-out을 지정하여 제거
* setMaxInactiventerval(second)
Session.setMaxInactiveInterval(60*60*24); //24시간
** 브라우저별로 다르게 설정 가능
* web.xml로 지정
** 모든 브라우저가 동일한 값이 설정됨
5. 세션의 제거방법
- 즉시 제거하는 방법
* invalidate() 메서드 사용 (예전에 썼던 세션은 버리고, 새로운 세션을 만들어서 사용하겠다는 의미)
** session.invalidate(); //즉시 제거
- 세션에 저장된 특정 속성 값을 제거하는 방법
* removeAttribute(name) 메서드 사용
** session.removeAttribute(name); //name 값에 해당되는 속성값만 제거
6. 실습 : 세션을 이용한 장바구니 실습
- HttpSession 클래스를 이용한 간단한 장바구니 기능 구현
product.html
CartSaveServlet.java
- 세션이 사라지는 경우 : 명시적으로 종료시키고 재시작했을때(?)
- 로그인 시, 유저네임과 패스워드가 세션 값으로 전송되면 패스워드 검사 후, 널 에러 처리 해주고, 이후에 로그아웃 할 때 세션 값을 삭제 해주면 됨. => 이때 사용하는 것이 session.invalidate(); 임.
쿠키의 발급은 서버가 함.
세션 아이디는 응답헤더파트에 담김
다음에 요청 시 요청 헤더에 쿠키헤더라는 곳에 여러 쿠키들이 담겨서 자동으로 서버로 전달됨.
=> 쿠키에는 보안정보를 저장해서는 안된다. 노출되는 정보이기 때문에 보안에 취약하기 때문이다.
==> 웹 사이트 당 300개까지 저장 가능하다.
===> 클라이언트에서 쿠키 사용 금지 설정 가능하다.
7. Cookie
- 쿠키
* 사용자의 상태 정보를 클라이언트에서 관리하는 메커니즘
* 서버의 부하는 줄이나 보안에 매우 취약
* 웹 사이트당 300개까지 저장 가능
* 클라이언트에서 쿠키 사용 금지 설정 가능
* 클라이언트의 브라우저 메모리나 OS 파일에 저장 가능 (timeout값을 운영해서 정해진 시간 내에는 쿠키정보가 남아있다.)
* 기본 저장은 브라우저 메모리 - 브라우저가 종료하면 자동으로 쿠키 제거
* 만료시간을 setMaxAge(age)로 설정하면, 지정된 시간까지 OS 파일에 저장
- JSessionID : 기본 메모리에 저장됨. 브라우저 종료시 사라지면서 로그아웃됨.
- 쿠키 메서드
* Cookie 클래스가 있음.
* response.addCookie(cookie) 를 통해서 응답 헤더로 설정됨.
* maxAge(만료시간)을 호출 안하면 default로 메모리에 저장됨. : 브라우저가 종료될때까지 살아있음.
* setMaxAge(second)를 호출하면 파일에 기록되며, 지정한 시간까지 살아있음.
* 쿠키발급은 응답에서 이뤄짐.
* 다음 요청 시, 쿠키는 request header에 담겨있음.
* 그 쿠키의 값을 얻을 때는 request.getCookies() 를 사용하면 됨. -> 복수형? : 목록을 얻는 것임. 값 하나를 얻으려면 루프를 돌려서 찾아야 함. -> 스프링에서는 쉽게 찾을 수 있도록 메커니즘이 되어있음.
- URL 전송 시, href나 src에 한글이 있는 경우에 그냥 바로 한글로는 못보낸다. -> 웹사이트에서 검색을 해봐도 검색어에 들어갈 한글부분이 아스키코드로 16진수로 변환된 것을 볼 수 있다. => 이것을 URL Encoding 이라고 부른다.
- 쿠키는 문자열 타입이다.
- 쿠키의 응답시간을 1초로 주면 받자마자 바로 버리는 의미가 됨. : c.setMaxAge(1);
- 세션은 서버에 저장, 쿠키는 브라우저(클라이언트)에 저장되는 문자열 정보이다.
<FrontCotroller 패턴과 Command 패턴>
1. FrontController 패턴
- 우리가 지향하는 모델 : 모델2 -> 요청을 서블릿에서 받아서 로직처리 후 결과데이터를 만들어냄.
- 사용자의 요청을 처리하기 위한 최초 진입점 정의
- 모든 사용자 요청을 한 개의 서블릿에 집중
* URL 맵핑 관리 단순화
* 모든 요청에 대해 일관된 방법으로 관리 가능
* FrntController 패턴 미적용 아키텍처
2. FrontController 적용 아키텍처
3. FrontController 패턴 고려사항
- 사용자 요청 식별 방법
http://서버IP번호: 포트번호/context명/식별값
http:localhost:8090/context명/식별값
*String requestURI
/detail.do
DetailCommand
detail.jsp
만들기~
ip주소 연결문제
172.30.x.xx -> 같은 공유기를 사용하는 전자기기로 모두 접속 가능
데이터로 접속 -> 통신사 데이터망이기 때문에 접속 불가능
Model2의 MVC(Model-데이터처리 View-결과출력 Controller-흐름제어, 비즈니스 제어 로직) 패턴
지금까지는 Get 요청에 대해서만 맛만 본 것일 뿐임.
'멀티캠퍼스 > Spring' 카테고리의 다른 글
230906 (수) (0) | 2023.09.07 |
---|---|
230905 (화) (0) | 2023.09.05 |
230901 (금) (0) | 2023.09.01 |
230831(목) (0) | 2023.09.01 |
20230830 (수) (0) | 2023.08.30 |