쿠키란?
- 브라우저(클라이언트)에 저장됨
- 이름과 값의 쌍으로 구성된 작은 정보
- 아스키 문자만 가능
- 유효기한 포함
- 서버에서 생성후 전송 -> 브라우저에 저장 -> 유효기간 이후 자동 삭제
- 서버에 요청시 domain,path가 일치(하위경로포함)하는 경우에만 자동 전송
- 클라이언트 식별 기술
쿠키생성
Cookie cookie = new Cookie("id","asdf"); //쿠키 생성
cookie.setMaxAge(60*60*24); //24시간 유효기간 설정
response.addCookie(cookie); //응답에 쿠키 추가
쿠키삭제
Cookie cookie = new Cookie("id",""); // 변경할 쿠키와 같은 이름 쿠키 생성
cookie.setMaxAge(0); //유효기간을 0으로 설정 (삭제)
response.addCookie(cookie); //응답에 쿠키 추가
쿠키 변경
Cookie cookie = new Cookie("id",""); // 변경할 쿠키와 같은 이름 쿠키 생성
cookie.setValue(URLEncoder.encode("dsadsa")); // 값의변경, 한글은 인코딩해야함, 꺼낼때 디코딩필요
cookie.setDomain("www.yunz.co.kr"); //도메인변경
cookie.setPath("/ch"); //경로변경
cookie.setMaxAge(60*60*24*7); //유효기간 변경
response.addCookie(cookie); //응답에 쿠키 추가
쿠키 읽어오기
- 스프링에서 메소드 매개변수에 @CookieValue("JSESSIONID" ) String sessionId 로 해당 쿠키id의 값을 가져올 수 있음
(다른 예: @CookieValue("id" ) String id ) - 아래의 방법으로 직접 읽어 와도됨
Cookie[] cookies = request.getCookies(); //쿠키 읽기, 없으면 null로 옴 체크해줘야함
for(Cookie cookie: cookies){
String name = cookie.getName();
String value = cookie.getValue();
System.out.printf("[cookie]name=%s,value=%s%n",name,value);
}
예제) 로그인아이디 기억하기
1. 목표: 다시 접속했을 때 아래와 같은 화면이 되어야 됨
2.jsp에서 EL을 이용해서 조건문으로 넣어주면 됨
3. 컨트롤러 처리
@Controller
@RequestMapping("/login")
public class LoginController {
@GetMapping("/login")
public String loginForm() {
return "loginForm";
}
@PostMapping("/login")
public String login(String id, String pwd, boolean rememberId, HttpServletResponse response) throws UnsupportedEncodingException {
System.out.println("id= "+id);
System.out.println("pwd= "+pwd);
System.out.println("rememberId= "+rememberId);
//id와pwd를 확인
if(!loginCheck(id,pwd)) {
// 일치하지 않으면 loginForm으로 이동
String msg = URLEncoder.encode("id 또는 pwd가 일치하지 않습니다.","utf-8");
return "redirect:/login/login?msg="+msg;
}
//아이디와 패스워드 일치하면 쿠키생성,응답에 저장,홈으로 이동
if(rememberId) { //아이디기억이 true이면 쿠키 생성
Cookie cookie = new Cookie("id",id);
response.addCookie(cookie);
} else { //false면 쿠키삭제(이전에 남아있을 수도 있으니깐)
Cookie cookie = new Cookie("id",id);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
return "redirect:/";
}
private boolean loginCheck(String id, String pwd) {
return "dsa".equals(id) && "123".equals(pwd);
}
}
'I leaned > 스프링,스프링부트' 카테고리의 다른 글
예외처리 (0) | 2023.05.25 |
---|---|
세션(Session) (0) | 2023.05.24 |
redirect와 forward (0) | 2023.05.23 |
@RequestMapping (0) | 2023.05.23 |
URL Encoding (0) | 2023.05.22 |