<view-controller path="/register/add" view-name="registerForm" />
// 해당 소스는 get 요청밖에 처리를 못함
redirect
: 다른 url 주소로 이동forward
: 같은 url에서 화면만 변화2) redirect는 302 / forward는 200
1) 정의 : 클라이언트를 구분하기 위한 기술 (식별)
2) 설명
ex)
Domain : fastcampus.co.kr
path : /ch2/login
3) 동작 과정
(1) 브라우저 -(요청)-> 서버
* 이 때, domain, path 일치
(2) 서버에서 쿠키를 생성 (response.addCookie(cookie))
Cookie cookie = new Cookie("id", "asdf");
response.addCookie(cookie);
HTTP/1.1 200
Set-Cookie: id=asdf
Content-Type: text/html; charset=UTF-8
Content-Language: ko-KR
Content-Length: 175
Date: Mon, 15 Nov 2021 07:50:09 GMT
(3) 클라이언트가 쿠키를 받아서 브라우저에 저장!
(4) 최초에 쿠키를 받게 되면 이후 요청은 쿠키와 함께 전달
POST /ch2/login/login HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 26
Cache-Control: max-age=0
Cookie: id=asdf; JSESSIONID=2F460A779BD0DD7339FB68220B814B75
4) 쿠키 생성방법
Cookie cookie = new Cookie("id","asdf"); // 쿠키 생성
cookie.setMaxAge(60*60*24); // 유효기간 설정(초)
response.addCookie(cookie); // 응답에 쿠키 추가
5) 쿠키 삭제방법
Cookie cookie = new Cookie("id",""); // 변경할 쿠키와 같은 이름 쿠키 생성
cookie.setMaxAge(0); // 유효기간을 0으로 설정(삭제)
response.addCookie(cookie); // 응답에 쿠키 추가
6) 쿠키 변경방법
Cookie cookie = new Cookie("id",""); // 변경할 쿠키와 같은 이름 쿠키 생성
cookie.setValue(URLEncoder.encode("이솔")); // 값 변경
// 쿠키 값으로는 아스크코드만 가능하니..!
cookie.setDomain("www.fastcampus.co.kr"); // 도메인 변경
cookie.setPath("/ch2"); // 경로 변경
cookie.setMaxAge(60*60*24*7); // 유효기간 변경
response.addCookie(cookie); // 응답에 쿠키 추가
7) 쿠키 읽어오기
Cookie[] cookies = request.getCookies(); // 쿠키 읽기
for(Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println("[cookie]name=%s, value=%s%n", name, value);
}
정의
생성 과정
1) 브라우저 요청시, 서버는 무조건 Session 객체(저장소)를 만듦
- 세션 객체마다 sessionId를 가지고 있음
2) 저장소를 쓸 수 있게 JSESSIONID 쿠키를 만들어서 브라우저에 보냄
3) 브라우저에 쿠키 저장
4) 다음 요청부터는 JSESSIONID를 request header에 자동으로 넣어서 보냄!
= 서버는 응답헤더에 Set-Cookie를 써서 보냄
= 브라우저에 쿠키가 만들어지고 JSESSIONID가 붙어서 가짐 (브라우저 구분용)
= JSESSIONID가 일치하는 세션저장소를 사용할 수 있음
세션 객체 얻기
// 컨트롤러에서 세션저장소 사용하는 방법
HttpSession session = request.getSession();
// 1. 요청 객체로부터 JSESSIONID를 보고 일치하는 것을 찾음
session.setAttribute("id", "asdf");
// 2. 반환값을 보고 해당 세션저장소에 값을 수정함!
2) 메서드
HttpSession session = request.getSession();
session.invalidate(); // 1. 세션 즉시 종료
session.setMaxInactiveInterval(30 * 60) // 2. 예약 종료 (30분 후)
2) 자동 종료 - web.xml (분 단위)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
= 세션이 종료되면 새로운 세션ID가 발급됨 (새로운 객체 생성)
= StandardManager가 세션의 생성과 소멸을 관리해줌
= 세션 객체는 서버에 오래 남아있기 쉬우니 부담을 줄이기 위해 많은 것을 저장하면 안됨
2) 세션
세션이 없는 첫 번째 요청마다 무조건
1)서버가 url 뒤에 session id를 붙여서 보내줌
2) set cookie로 쿠키로 저장하게끔도 보내줌!
이 후 요청부터는 url 뒤에 session id가 안붙음