본문 바로가기

항해99

항해 7일차 TIL - cookie는 꼭 js 코드에서 삭제해야 하나요?

What : 어떤 문제가 있었는지

Try : 시도해본 것들

How : 어떻게 해결했는지

 

WHAT

1주차 진행했던 프로젝트에서는 쿠키를 자바스크립트 파일을 통해 생성, 삭제합니다.

function logout(){
        $.removeCookie('mytoken', { path: '/' });
        alert('로그아웃!');
        window.location.href='/';
  }

jwt 발급을 Be에서 하는것은 이해가 됩니다. 사용된 암호화 알고리즘, payload에 들어간 정보 등을 클라이언트에게 노출시킬 필요는 없을 것 같아요. 보안 측면에서도 Be에서 수행하는게 적절하다고 생각했습니다.

 

그런데 왜 쿠키 생성, 삭제는 Fe에서 한걸까요? 저는 그 이유를 잘 모르겠더라구요.

쿠키를 생성하고 삭제하는 것은 인증과 연관이 있는 것이기 때문에 Be에서 처리해야 더 적절하지 않을까라는 생각을 해봤습니다. 결국 생각이 꼬리에 꼬리를 물고 Be에서는 쿠키를 만료시킬 수 없어서 그런가? 이런 엉뚱한 생각이 들었습니다.

 

TRY

0주차에 팀원들과 진행했던 토이 프로젝트 코드 일부입니다.

# python login API 일부

if login_member['passwd'] == passwd_receive:
    response = make_response()
    response.set_cookie('emailCookie', login_member['email'])
    return response

이렇게 쿠키를 생성했었네요.

 

set_cookie() 메서드 일부입니다. 쿠키의 유효기간과 관련되어 보이는 인자가 몇 개 보입니다.

def set_cookie(
    self,
    key: str,
    value: str = "",
    max_age: t.Optional[t.Union[timedelta, int]] = None,
    expires: t.Optional[t.Union[str, datetime, int, float]] = None,
  • max_age : 쿠키의 유효 시간을 나타냅니다.
  • expires: 쿠키의 만료 기한입니다.

둘은 비슷해 보이는데 max_age는 60초! 이런식이라면 expires 는 2022-12-13일 23:00 시 이런 느낌입니다.

여튼 본론으로 돌아와서 max_age를 이용하면 쿠키를 만료시킬 수 있지 않을까 생각했습니다.

 

HOW

응답에 쿠키 만료 시간을 적어 보냈습니다.

@routes.route('/logoutV2', methods=['GET'])
def logoutV2():
    response = make_response()
    response.set_cookie('mytoken', max_age=1)

    return response

 

실행 전

실행 후 (1초가 지나기 전) 요건 value를 공백으로 설정해서 변화한 것!

실행 후 (1초 후)