본문 바로가기
Programming

[Flask Web] 크롬 SameSite 에러 발생 해결법(에러: Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute)

by daewooki 2021. 7. 29.
반응형

Flask로 웹 서버를 구현하고 페이지를 생성한 후 다른 도메인의 사이트에서 iframe에 해당 페이지를 띄우는 작업을 하는도중 IE에서는 발생하지 않는, Chrome에서만 발생하는 이슈가 있었다. 해당 이슈가 발생하고 다음 페이지로 넘어가지지 않았다. 

 

(https://tistory.com/ 페이지 iframe에 https://wookidocs.com 페이지를 열고, 페이지에서 다른 페이지로 접근하게 됐을 때 쿠키가 전달되지 않는 이슈이다)

 

구글링을 해보니, 크롬 보안 정책이 업그레이드 되면서 기존에 쿠키에 SameSite가 None으로 세팅되던 것이 default로  "Lax" 로 설정되기 때문에 해당 이슈가 발생한다고 한다. 

 

 

Flask에서 해당 페이지에 쿠키를 세팅해줄 때, SameSite, Secure 파라미터를 지정해주어 문제를 해결할 수 있었다.

 

from flask import Blueprint, render_template, request, flash, redirect, make_response

bp = Blueprint('index', __name__, url_prefix='/home')

@bp.route('/', methods=('GET', 'POST'))
def index():
    cookie_name = 'test'
    resp = make_response(render_template('home.html'))
    resp.set_cookie('cookie_name', cookie_name, samesite='None', secure=True)
    return resp

 

위의 코드처럼 Flask 에서는 make_response 함수를 이용해서 쿠키를 세팅해줄 수 있다. 

samesite='None' 으로 지정, secure=True로 지정해주고 html 템플릿을 rendering 하면 된다.

 

 

다시 이슈 발생했던 대로 하고 F12를 눌러 쿠키를 확인해보면 아래와 같이 나온다.

 

페이지 전환도 잘 이루어진다. 

 


참고

 

각 언어별로 samesite 쿠키 문제를 해결하기 위한 예제들이 있다. 

https://github.com/GoogleChromeLabs/samesite-examples

 

GitHub - GoogleChromeLabs/samesite-examples: Examples of using the SameSite cookie attribute in a variety of language, libraries

Examples of using the SameSite cookie attribute in a variety of language, libraries, and frameworks. - GitHub - GoogleChromeLabs/samesite-examples: Examples of using the SameSite cookie attribute i...

github.com

 

반응형

댓글