안녕하세요. 현재 저희 서비스에서는 페이플 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;
읽어주셔서 감사합니다.
아 제가 버전을 설명안했네요.. 죄송합니다. CI3 이며, 정확히는 const CI_VERSION = '3.1.11'; 입니다.
말씀하신 것 처럼 새로운 세션이 추가 되어서 그런 것 같습니다만..
내용에 작성 해놓은 부분처럼
"콜백의 경우 페이플 업체의 도메인에서 자사 서비스 API를 호출" 하는 상황에서만
"간헐적" 으로 발생이 되고 있어 문의 드려봅니다.
"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가 서로 다르다면 새로운 세션이 만들어 질테니, 로직 수정하셔야 할거에요.
정확하게 ci2 인가요? ci3인가요?
ci3에서는 상당부분 세션관련 문제가 없어졌습니다. ci2라면 포럼에서 세션으로 검색해서 나오는 글들 참고하세요. (ci3도 참고하시면 좋습니다)
그리고 세션이 사라지는게 아니라 새 세션이 추가생성되는 겁니다. 기존 세션은 살아있고 데이터를 가지고 있습니다.