본문 바로가기

개발/PHP 라라벨

session_start() 함수 호출해도 쿠키에 PHPSESSID 저장 안되는 문제

로컬 환경에서 프레임워크를 사용하지 않는 php 개발을 하게 되었다.

 

session_start() 함수를 호출하면 header 에 아래와 같은 정보가 생성된다.

Set-Cookie: PHPSESSID=mvegl320ck40kktumvpebptki6; path=/

 

크롬 브라우저에서 이런 헤더 응답받았으면 쿠키값에 저장을 해야 하는데 PHPSESSID 가 저장이 안되는 문제가 생겼다.

크롬의 정책때문이라고 하는데 아래와 같이 변경해줘야 한다.

 

$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);
}

 

헤더에 secure 를 추가 해주면 https 로 통신할때만 해당 쿠키값을 저장하게 된다.

 

나는 로컬에서 개발중이라 ssl 설치는 하지 않고 개발자 모드 화면에서 직접 쿠키를 추가해줬다.

 

 

운영에서는 어차피 https 를 사용하기 때문에 임시방편으로 로컬에서는 수동으로 쿠키를 저장했다.

 

물론 응답값에 PHPSESSID 값을 따로 저장해서 스크립트에서 쿠키를 저장해도 된다.