Programming
[Flask Web] 크롬 SameSite 에러 발생 해결법(에러: Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute)
daewooki
2021. 7. 29. 10:17
반응형
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
반응형