본문 바로가기
프로그래밍 개발/Express

Express - 쿠키의 옵션

by Jinseok Kim 2021. 1. 15.
반응형

 

쿠키의 옵션

 

 

 

 

Session 쿠키 와 Permanent 쿠키

 

 

 

웹브라우저를 끄면 사라지는 휘발성 쿠키를 Session cookie라고 하고 웹브라우저를 꺼도 사라지지 않는 쿠키를 Permanent cookie라고 한다. 

 

 

 

 

var http = require('http');
var cookie = require('cookie');
http.createServer(function(request, response){
    console.log(request.headers.cookie);
    var cookies = {};
    if(request.headers.cookie !== undefined){
        cookies = cookie.parse(request.headers.cookie);
    }
    console.log(cookies.yummy_cookie);
    response.writeHead(200, {
        'Set-Cookie':[
            'yummy_cookie=choco', 
            'tasty_cookie=strawberry',
            `Permanent=cookies; Max-Age=${60*60*24*30}`
        ]
    });
    response.end('Cookie!!');
}).listen(5000);

 

  • Session cookie는 뒤에 아무것도 붙어있지 않지만  Permanent cookie는 Max-Age=${60*60*24*30}와 같이 뒤에 붙여준다면 휘발성이 아닌 언제까지 쿠키가 유지될 것인지 시간을 조절할 수 있게 된다. ${}안의 식은 시간을 계산한 값이다.
  • 숫자 1당 초로 인식되며 60곱하기 60곱하기 24 곱하기 30는 한 달이다.

 

 

 

크롬 개발자로 쿠키 데이터를 보면 Permanent cookie가 적용된 쿠키는 지금으로부터 한 달 뒤에 만료된다고 표시되어 있는 것을 확인 할 수 있다. 오늘 날짜는 2021-01-15이다.

 

 

 

 

 

 

 

 

 

 

Secure 와 HttpOnly

 

 

  • Secure는 웹브라우저와 웹서버가 https로 통신하는 경우만 웹브라우저가 쿠키를 서버로 전송하는 옵션이다. 
  • HttpOnly는 자바스크립트의 document.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션이다. 쿠키를 훔쳐가는 행위를 막기 위한 방법이다. 

 

 

var http = require('http');
var cookie = require('cookie');
http.createServer(function(request, response){
    console.log(request.headers.cookie);
    var cookies = {};
    if(request.headers.cookie !== undefined){
        cookies = cookie.parse(request.headers.cookie);
    }
    console.log(cookies.yummy_cookie);
    response.writeHead(200, {
        'Set-Cookie':[
            'yummy_cookie=choco', 
            'tasty_cookie=strawberry',
            `Permanent=cookies; Max-Age=${60*60*24*30}`,
            'Secure=Secure; Secure',
            'HttpOnly=HttpOnly; HttpOnly'
        ]
    });
    response.end('Cookie!!');
}).listen(5000);

보안을 하고 싶은 쿠키 값 뒤에 Secure와 HttpOnly을 붙여준 것을 확인 할 수 있다.

 

 

http로 통신하지 않자 Secure을 붙여 놓은 쿠키 Secure=Secure는 크롬 개발자에서 확인 할 수 없었다.

 

 

 

 

 

 

자바스크립트를 이용하여 콘솔창에서 cookie 값들을 나열해보았지만 HttpOnly을 붙여준 쿠키 HttpOnly=HttpOnl는 출력되지 않았다. 중요한 정보를 악의를 가지고 훔치려는 것을 방지할 수 있게 되었다.

 

 

 

 

 

 

 

 

 

 

 

path 와 domain

 

 

쿠키의 유효범위를 정의하는 path와 domain 옵션이 있다.

 

 

var http = require('http');
var cookie = require('cookie');
http.createServer(function(request, response){
    console.log(request.headers.cookie);
    var cookies = {};
    if(request.headers.cookie !== undefined){
        cookies = cookie.parse(request.headers.cookie);
    }
    console.log(cookies.yummy_cookie);
    response.writeHead(200, {
        'Set-Cookie':[
            'yummy_cookie=choco', 
            'tasty_cookie=strawberry',
            `Permanent=cookies; Max-Age=${60*60*24*30}`,
            'Secure=Secure; Secure',
            'HttpOnly=HttpOnly; HttpOnly',
            'Path=Path; Path=/cookie',
            'Doamin=Domain; Domain=test.o2.org'
        ]
    });
    response.end('Cookie!!');
}).listen(5000);
  • 쿠키 값 뒤에 Path=/cookie을 붙여주면 /cookie 경로 및 /cookie의 하위 경로에서만 쿠키 값이 살아있다는 의미로 받아드릴 수 있다.
  • 쿠키 값 뒤에 Domain=test.o2.org을 붙여주면 o2.org가 붙은 어떠한 하위 경로에서도 쿠키 값은 살아있다고 볼 수 있다.

 

 

/cookie 경로에서만 설정한 Path 쿠키값이 등장한다.

 

 

 

 

 

 

/cookie의 하위 경로에도 Path의 쿠키값이 존재하고 있다.

 

 

반응형

댓글