loginForm.jsp를 만들고 이를 LoginController에서 호출한다.
아이디 기억을 쿠키를 통해 구현할 것이다.
1. id, pwd를 확인하기 위해 변수로 id, pwd, rememberId를 만든다.
2. id, pwd가 일치하지 않을 때 msg를 출력하기 위해 URLEncoder를 이용한다.
3. redirect는 Get요청으로 돌아가기 때문에 GetMapping된 loginForm으로 돌아간다.
4. loginCheck는 간단히 만든다.
redirect를 위해 index.jsp를 만든다.
home을 HomeController가 받아서 출력이 되지 않는다.
HomeController를 index로 가게 만든다.
새로고침을 하면 CSS가 적용되지 않는다.
정적 파일이기 때문에 CSS를 resources에 css폴더 안에 만든다.
잘 출력된다.
1. 쿠키란?
이름(id), 값(asdf)이 쌍으로 구성된 작은 정보이고, Domain, path, Max-Age(유효 기간) 정보도 갖고있다. 아스키 문자만 저장 할 수 있다. semi-colon, 공백 저장하지 못한다. 한글은 URL 인코딩 해야한다.
서버에서 생성 후 전송되고 유효기간이 지나면 자동으로 삭제된다. Domain, path가 일치할 경우 자동 전송되며 path에 있는 하위 경로까지 같이 전송된다.
2. 쿠키의 작동 과정
클라이언트가 request를 하면 서버가 위 두 줄을 실행한다.
위 쿠키를 응답에 담아서 보낸다. 응답 header에 set-Cookie : id=asdf 한 줄이 추가 된다.
요청한 쿠키가 브라우저에 저장되고, 클라이언트가 서버에게 쿠키에 일치하는 요청을 보내게되면 자동으로 쿠키도 따라간다. 요청 header에 쿠키가 들어가는데 id, JESSIONID 2개가 들어간다.
비유 하자면 서버는 도서관이고 쿠키는 도서관 카드라 생각하면 된다. 쿠키는 브라우저에 저장되는 정보이므로 삭제도 가능하고 서버가 발급하는 쿠키를 거절할 수 있다.
쿠키는 클라언트를 식별하는 기술이다. 서버는 요청만 응답하면 되지만 경우에 따라서 클라이언트를 식별해야할 때가 있다.
3. 쿠키의 생성
쿠키 생성은 name과 value를 입력한다. 다음 유효기간을 설정하는데 60*60*24는 24시간이다. response에 addCookie 메서드를 이용해서 쿠키를 추가한다.
응답을 보면 Set-Cookie가 추가되는데 코드 세줄이 이 한줄을 추가하기 위한 것이다. Max-Age, Expires 둘다 유효기간인데 Max-Age는 상대 시간으로 생성한 이후로 86,400초 이후에 파기된다. Expires는 절대 시간으로 시간을 알려준다. 둘다 쓰는 이유는 브라우저마다 사용하는 테그가 다를 수 있어 2개를 추가한다.
HTTP는 대부분 2개의 유효기간을 사용하는데 컴퓨터 시간이 맞는다는 보장이 없어서 쿠키가 제대로 작동하지 않을 수 있다. 이 때, 상대시간을 이용해서 쿠키가 파기될수 있게 한다.
4. 쿠키의 삭제와 변경
쿠키 삭제는 유효 기간을 0으로 하면 된다. 쿠키의 id는 들어가야 하고 value는 넣지 않아도 된다. 브라우저가 이 쿠키를 받아 같은 이름이 있으면 갱신을 하고 유효기간이 0이므로 파기된다.
쿠키는 name, value 외에도 많은 설정이 있다. 쿠키는 ASCII를 사용해서 한글을 넣으려면 인코딩해야 한다. 주의해야 할 점은 마지막에 꼭 reponse에 쿠키를 추가해야 한다.
5. 쿠키 읽어 오기
쿠키 읽는 방법은 request 메서드 getCookies를 사용하면 되는데 쿠키가 여러개일 수 있어 배열로 받아야 한다.
위는 쿠키를 요청했을 때 보내주는 내용이다. POST에 path가 있고, Host는 domain이다. 이 path와 doamin이 일치하는 쿠키를 맨 밑줄 Cookie에 담는다. 쿠키가 없으면 배열에 null이 담긴다.
쿠키를 만드는 이유가 login 창을 눌렀을 때 아이디어를 기억하게 만드는 것이다. 쿠키가 있다면 id를 뿌리고 아이디 기억을 체크하면 되고 쿠키가 없다면 아무 기능도 없게하면 된다.
지금은 아무것도 안들어가 있지만 만약 바뀐다면
위와 같이 value에 "asdf"가 들어가야한다. 또 input tag에 아이디 기억이 체크되야 한다.
두 줄을 추가한다.
쿠키가 없으면 브라우저에서 만들 수 있다. 잘 작동한다.
id, pwd, rememberId가 어떻게 찍히는지 본다.
String으로 들어와서 on, off로 나온다. 그 이유는
input tag에 value 속성을 입력 안하면 기본 값이 value="on"으로 들어온다.
rememberId를 boolean으로 바꾼다.
위를 추가했더니 브라우저가 쿠키를 만들어주는 것을 확인할 수 있다.
아이디 기억을 해제하고 돌아오면 남아있는 쿠키 때문에 아이디 기억이 저장된다.
아이디 기억을 boolean으로 바꾸었기 때문에, 이를 통해 쿠키를 생성하고 삭제하는 코드를 바꾼다.
새로고침 하면 쿠키가 사라진다.
'스프링의 정석 > Ch. 02 Spring MVC' 카테고리의 다른 글
25. 세션(Session) - 실습(1) (0) | 2023.08.14 |
---|---|
24. 세션(Session) - 이론 (0) | 2023.08.14 |
22. redirect와 forward (0) | 2023.07.27 |
21. @GetMapping, @PostMapping (2) (0) | 2023.07.27 |
20. @GetMapping, @PostMapping (1) (0) | 2023.07.25 |