헤더 내부에 한글로 된 정보 입력할 때
리디렉트
res.writeHead( 302,
{
Location : "/" ,
"Set-Cookie" : "name=홍길동; expires=날짜한글; HttpOnly; Path=/; "
}
);
"Set-Cookie" : "name=홍길동 ..."
=>
"Set-Cookie" : name=${encodeURIComponent(홍길동)} ...
헤더에는 한글을 설정할 수 없음
한글을 encodeURIComponent 메서드로 인코딩
서버측 :
req.headers.cookie 내부에 인코딩된 값을 디코딩 parser를 만들어 쓴다.
decodeURIComponent(한글);
Cookie 셋팅
"Set-Cookie" : "name=홍길동; expires=날짜한글; HttpOnly; Path=/; "
Set-Cookie로 쿠키를 설정할 때 만료 시간(Expires)과 HttpOnly, Path 같은 옵션부여가능 (옵션 사이에 세미콜론(;) 필수)
/**
• 쿠키명=쿠키값: 기본적인 쿠키의 값입니다. mycookie=test 또는 name=zerocho와 같이 설정합니다.
• Expires=날짜: 만료 기한입니다. 이 기한이 지나면 쿠키가 제거됩니다. 기본값은 클라이언트가 종료될 때까지입니다.
• Max-age=초: Expires와 비슷하지만 날짜 대신 초를 입력할 수 있습니다. 해당 초가 지나면 쿠기가 제거됩니다. Expires보다 우선합니다.
• Domain=도메인명: 쿠키가 전송될 도메인을 특정할 수 있습니다. 기본값은 현재 도메인입니다.
• Path=URL: 쿠키가 전송될 URL을 특정할 수 있습니다. 기본값은 ‘/’이고, 이 경우 모든 URL에서 쿠키를 전송할 수 있습니다.
• Secure: HTTPS일 경우에만 쿠키가 전송됩니다.
• HttpOnly: 설정 시 자바스크립트에서 쿠키에 접근할 수 없습니다. 쿠키 조작을 방지하기 위해 설정하는 것이 좋습니다.
*/
Cookie Parser method
function parseCookies (cookies=""){
// [[key , value ], ... ]로 데이터를 만든다.
const _cookies = cookies.split(";").map( cookie => cookie.split("="))
// {key : value , key : value ... }
const initialContainer = {}
// [[key , value ], ... ]의 안에 값을 꺼내옴 => [k,v]
_cookies.reduce((container, [k, v]) => {
container[k.trim()] = decodeURIComponent(v) // 인코딩된 한글을 디코딩
return container; // 꼭 리턴해줘야한다.
} , initialContainer)
// reduce return값은 정해진 컨테이너 타입에 값이 담겨져서 리턴됨.
}