on
PHP setcookie Samesite 설정 Chrome80 버전 이후
PHP setcookie Samesite 설정 Chrome80 버전 이후
SAMESITE란?
사이트에 쿠키 전송할 범위를 설정하는 것으로
설정에 대한 옵션값은 3가지를 가지고 있습니다.
Strict = 도메인과 대상 도메인이 일치해야만 쿠키가 포함되어 전송됩니다.
도메인과 대상 도메인이 일치해야만 쿠키가 포함되어 전송됩니다.
Lax = , 정도만 예외되고 나머지는 Strict와 동일하게 동작합니다.
None = 쿠키 사용에 있어서 소스가 되는 주소를 검증하지 않습니다.
크롬 80버전 이후 결제모듈(이니시스 등) 결제 후 세션이 끊키는 현상이 생겼는데,
여러 삽질을 통해 알게된 내용으로는 결제 이후 REDIRECT 후
브라우저 SESSID가 변경거나 공유되지 않는 현상을 발견했습니다.
그로인해 고생이신분들은 PHPSESSID 및 일부 세션쿠키들을 아래 와 같이 변경해주시면 됩니다.
PHP7.3 이하 버전 적용 소스
SSL환경에서만 적용 되는걸로 확인
setcookie('키값','밸류',0,"/; SameSite=None; Secure;");
PHP7.3 이상 버전 적용 소스
setcookie('cross-site-cookie', 'bar', ['samesite' => 'None', 'secure' => true]);
또다른 대체 방법
session_start() 대신 아래 session_start_samesite 펑션으로 대체해주세요.
function session_start_samesite($options = array()) { $res = @session_start($options); $headers = headers_list(); foreach ($headers as $header) { if (!preg_match('~^Set-Cookie: PHPSESSID=~', $header)) continue; $header = preg_replace('~; secure(; HttpOnly)?$~', '', $header) . '; secure; SameSite=None'; header($header, false); } return $res; } session_start_samesite();
from http://eyeber4605.tistory.com/16 by ccl(A) rewrite - 2021-03-25 12:00:43