728x90
반응형
■ PHP Chrome 크롬 80, 크롬84 쿠키 정책, SameSite=None 설정, 결제 세션 끊김 현상, 크롬 결제 안됨, 윈도우 서버 asp
■ SameSite 설정
사이트 내 쿠키 전송 범위를 설정하는 값으로 setcookie 설정에 대한 옵션값은 3가지 존재
- Strict
현 도메인 및 대상 도메인이 동일해야만 쿠키가 포함되어 전송됨
(현 도메인과 다른 경우 쿠키 제공 안됨) - Lax
Strict와 동일하게 도메인이 다른 경우 쿠키 제공 안됨
그러나 <a href="">, <link rel = "prerender" href = "">, <form method=GET> 경우 예외로 쿠키 제공 됨 - None
주소가 검증되지 않음, 어느 도메인이든 쿠키 제공 (크롬 80의 경우 None 설정 시 Secure 필수, HTTPS)
■ 크롬(Chrome) 80 버전부터 쿠키 정책 변경 사항 및 관련 이슈
- 구글 크롬 버전 80 이후부터 쿠키의 SameSite 속성 기본 디폴트값이 None > Lax 로 변경됨
- 기존 외부 사이트와 도메인 주소가 상이하여도 제한 없이 공유 가능하였지만,
크롬 80 이후 도메인 주소가 다를 경우 쿠키 사용이 제한됨
- Https 로 운영되는 사이트(SSL)에 한해 SameSite = None; 정책을 사용할 수 있음
■ SameSite 설정 방법
- PHP 7.3 이하 버전의 경우 (SSL 환경에서만 적용 가능)
setcookie($name, $value, 0, "/; SameSite=None; Secure;");
- PHP 7.3 이상 버전
setcookie('same-site-cookie', 'foo', ['samesite' => 'Lax']);
setcookie('cross-site-cookie', 'bar', ['samesite' => 'None', 'secure' => true]); // 도메인이 다를 경우
■ 세션 끊김, 쿠키 samesite 대체 방법
session_start() 대신 하기 함수로 대체
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();
728x90
반응형
'PHP' 카테고리의 다른 글
[PHP] POST input 값 전송 시 데이터 잘림, max_input_vars (0) | 2022.01.13 |
---|---|
[PHP] 쿠키 설정하기, setcookie() (0) | 2022.01.11 |
[PHP] Pass Parameters In Cron URL : crontab 매개변수 $argv (0) | 2021.11.26 |
[PHP] 함수 앞에 붙는 @ 의미 (0) | 2021.10.13 |
[PHP] PHPExcel 에서 숫자 출력 (1) | 2021.09.24 |