쿠키(Cookie)

jooog·2021년 12월 29일
0

스프링

목록 보기
9/26

🥯쿠키(Cookie)의 정의

이름과 값의 쌍으로 구성된 작은 정보를 의미한다.
쿠키에는 기본적으로 아스키 문자만 저장할 수 있고 한글을 저장하려면 url 인코딩을 해야한다.

예를들어 id = user 에서 id는 name, user는 value로 이러한 한 쌍의 형식으로 구성된다.

쿠키 작동 과정

서버에서 생성 -> 브라우저에 저장 -> 유효기간 지나면 자동삭제
서버에 요청하는 경우 domain, path가 일치하는 경우에만 자동전송된다.

Controller생성하기

쿠키에 아이디와 패스워드 정보를 저장한다.

@Controller
@RequestMapping("/login")
public class LoginController {

    @GetMapping("/login")
    public String loginForm(){
        return "loginForm";
    }

    @PostMapping("/login")
    public String login(String id, String pwd, String rememberId) throws Exception{

        if(!loginCheck(id,pwd)){
      //아이디와 패스워드를 확인한다.     
            String msg = URLEncoder.encode("id 또는 pwd가 일치하지 않습니다.", "utf-8");
            return "redirect:/login/login?msg="+msg;
        }
        return "redirect:/";
      //아이디와 패스워드가 일치하면 홈으로 이동한다.
    }
    private boolean loginCheck(String id, String pwd){
        return "user".equals(id) && "1234567".equals(pwd);
    }
}

쿠키 생성

요청을 받으면 서버에서 쿠키를 생성하는 과정

//쿠키를 생성한다
Cookie cookie = new Cookie("id", "member");

//쿠키의 유효기간을 설정해준다(초단위)
cookie.setMaxAage(60*60*24);

//응답으로 쿠키를 전달한다
response.addCookie(cookie);

쿠키 삭제

//삭제할 쿠키와 같은 이름으로 쿠키를 생성한다
Cookie cookie = new Cookie("id", "");

//쿠키의 유효기간을 0으로 설정한다(삭제)
cookie.setMaxAage(0);

//응답으로 쿠키를 전달한다
response.addCookie(cookie);

쿠키로 로그인 상태 표시하기

쿠키에 아이디 비밀번호 정보가 있으면 로그인 페이지에 표시한다

<input type="text" name="id" placeholder="이메일 입력" autofocus>
<input type="password" name="pwd" placeholder="비밀번호">
    <button>로그인</button>
        <div>
            <label><input type="checkbox" name="rememberId" > 아이디 기억</label> |
            <a href="">비밀번호 찾기</a> |
            <a href="">회원가입</a>
        </div>
        

쿠키를 사용해 아이디와 아이디기억하기

<input type="text" name="id" placeholder="이메일 입력" autofocus value="${cookie.id.value}">
<input type="password" name="pwd" placeholder="비밀번호">
    <button>로그인</button>
        <div>
            <label><input type="checkbox" name="rememberId" ${empty cookie.id.value ? "":"checked"} > 아이디 기억</label> |
            <a href="">비밀번호 찾기</a> |
            <a href="">회원가입</a>
        </div>

브라우저에서 쿠키 생성

id의 값을 member로 설정했다

쿠키에 설정한 id값과 아이디 기억란에 체크가 표시된다

컨트롤러에서 생성

import javax.servlet.http.Cookie;

@Controller
@RequestMapping("/login")
public class LoginController {

    @PostMapping("/login")
    public String login(String id, String pwd, boolean rememberId) throws UnsupportedEncodingException {
    
        System.out.println("id:" + id);
        System.out.println("password:" + pwd);
        System.out.println("rememberId:" + rememberId);

        if(rememberId) {
            //rememberId가 true면 쿠키 생성
            //쿠키 생성하기
            Cookie cookie = new Cookie("id", id);

            //응답으로 저장
            response.addCookie(cookie);
        } else {
            //rememberId가 false면 쿠키 삭제
            Cookie cookie = new Cookie("id", id);
            cookie.setMaxAge(0); //삭제
            //응답으로 저장
            response.addCookie(cookie);
            
        }



        return "redirect:/";
    }

0개의 댓글