CI 묻고 답하기

제목 결제 이후 세션 사라지는 부분
카테고리 CI 2, 3
글쓴이 다다닷 작성시각 2024/02/14 16:12:19
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 3472   RSS

안녕하세요. 현재 저희 서비스에서는 페이플 PG를 이용하고 있습니다.

결제 로직은 아래와 같이 단순합니다.

 

서비스 결제 페이지에서 사용자는 무조건 로그인이 되어 있는 상태입니다.

 

1.결제 요청 버튼 클릭 -> 2.PG 결제 화면 표시 -> 3.정보 기입 -> 4.결제 요청  -> 5.결제 진행 및 완료 -> 6.callback

 

이런 프로세스인데, 간헐적으로 콜백을 받는 과정에서 기존 로그인 세션이 사라져서 

 

callback으로 지정해놓은 API 호출시 $this->session 정보가 없어서 프로세스 진행이 안되는 상황입니다.

 

관련해서 같은 상황을 경험해보신 분이 계실까 싶어 문의 드려봅니다.

 

++++

- 콜백의 경우 페이플 업체의 도메인에서 자사 서비스 API를 호출 해주는 형태인데,

웹 서버 (NGINX) 로그를 확인 해보면 결제 요청 버튼 클릭시 IP와, 콜백 받을 때 IP는 동일하며, "도메인만 다릅니다."

결제 요청시에는 자사 도메인이고, 콜백은 PG사 도메인입니다. 

때문에 

ini_set('session.cookie_secure', 1);

ini_set('session.cookie_httponly', 1);

ini_set('session.cookie_samesite', 'None');

위와 같은 설정도 config.php 상단에 해봤지만 간헐적 세션 사라짐은 여전하더라구요..

 

- 간헐적으로 발생하는 상황은 안드로이드 모바일에서만 발생 합니다.

 

- 모바일 네이버 앱에서 자사 서비스 결제 페이지 진입하여 결제 진행시 위와 같이 간헐적 세션 사라짐이 발생합니다.

++++

 

컨피그 설정은 아래와 같습니다.

 

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 43200;
$config['sess_save_path'] = APPPATH.'session';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300; // 더 큰 값(3600)으로도 변경해서 테스트 해봤습니다만 똑같습니다.
$config['sess_regenerate_destroy'] = FALSE;

 

$config['cookie_prefix']    = '';
$config['cookie_domain']    = '.자사도메인.com';
$config['cookie_path']     = '/';
//$config['cookie_path'] = '/; SameSite=None; Secure'; (주석상태)
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

 

읽어주셔서 감사합니다.

 다음글 CI4 css js 경로문제 (3)
 이전글 페이지네이팅 링크 paginating (1)

댓글

변종원(웅파) / 2024/02/15 16:33:57 / 추천 0

정확하게 ci2 인가요? ci3인가요?

ci3에서는 상당부분 세션관련 문제가 없어졌습니다. ci2라면 포럼에서 세션으로 검색해서 나오는 글들 참고하세요. (ci3도 참고하시면 좋습니다)

그리고 세션이 사라지는게 아니라 새 세션이 추가생성되는 겁니다. 기존 세션은 살아있고 데이터를 가지고 있습니다.

다다닷 / 2024/02/15 18:47:26 / 추천 0

아 제가 버전을 설명안했네요.. 죄송합니다. CI3 이며, 정확히는 const CI_VERSION = '3.1.11'; 입니다.

말씀하신 것 처럼 새로운 세션이 추가 되어서 그런 것 같습니다만.. 

내용에 작성 해놓은 부분처럼 

"콜백의 경우 페이플 업체의 도메인에서 자사 서비스 API를 호출" 하는 상황에서만 

"간헐적" 으로 발생이 되고 있어 문의 드려봅니다.

다다닷 / 2024/03/12 12:49:25 / 추천 0

"CI 묻고 답하기" 이곳에 조금 더 명쾌한 답변들로 가득찰 수 있길 바라며,

저와 같은 문제가 발생하고 계신분들 CI 버전 체크하셔서 3.1.11 버전 보다 높은 버전 이용하시고, samesite 설정하셔서 이용해보세요.

버전 업그레이드 후 본인 config.php 설정은 아래와 같습니다.

 

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_samesite'] = 'None';
$config['sess_expiration'] = 86400;
$config['sess_save_path'] = APPPATH.'session';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 3600;
$config['sess_regenerate_destroy'] = FALSE;

$config['cookie_prefix']	= '';
$config['cookie_domain']	= '.도메인';
$config['cookie_path']		= '/';
$config['cookie_secure']	= TRUE;
$config['cookie_httponly'] 	= TRUE;
$config['cookie_samesite'] 	= 'None';

 

참고로 저는

자사 서비스 -> PG 호출 ( 1.2.3.4 / 자사 서비스)

PG 결제 후 -> 자사 서비스 ( 1.2.3.4 / PG 서비스) 

위와 같이 web server - access log 보면 IP는 동일한 상황이었고, referrer 주소만 달랐습니다.

만약 IP가 서로 다르다면 새로운 세션이 만들어 질테니, 로직 수정하셔야 할거에요.