CI 묻고 답하기

제목 http환경에서 크롬 이니시스 pc결제시 session 사라짐 문제
카테고리 CIBOARD
글쓴이 양가리 작성시각 2021/01/28 14:56:01
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 546   RSS

안녕하세요

고수님들의 도움 부탁드립니다.

https가 아닌 http 환경에서 크롬에서 이니시스 pg를 이용할 경우 모바일에서는 결제가 잘 되는데 피시에서는 모든 세션이 사라져 버려서 결제가 안됩니다.

여러가지로 계속 검색하다보니 그누보드에서는 그 부분에 대한 설명과 패치파일들도 있던데

저는 씨아이보드를 이용하고 있어서 어떤파일을 어떻게 수정해야 하는지 모르겠네요.

어떤파일에 어떻게 적용해야 되는지를 잘 모르겠네요.

config 파일에서

$config['cookie_prefix'] = '';

$config['cookie_domain'] = '';

$config['cookie_path'] = '/; SameSite=None';

$config['cookie_secure'] = TRUE;

$config['cookie_httponly'] = FALSE;

이렇게 수정했더니

Message: Cookie paths cannot contain any of the following ',; \t\r\n\013\014'

Filename: Session/Session.php

Line Number: 170

이런 에러가 뜹니다. 아마도 https 환경이 아니라서 그런건지 ㅠ.ㅠ

그리고 그누보드에는 http 환경에 대한 관련 패치 수정사항이 있긴 한데

아래 부분을 어떻게 씨아이보드에 반영해야 할지 모르겠네요 ㅠ.ㅠ

도움 부탁드립니다.

 

크롬 80 버전 KG이니시스 http 환경의 PC에서 결제가 안되는 현상 수정

class XenoPostToForm
    {
    public static function check() {
    return !isset($_COOKIE['PHPSESSID']) && count($_POST) && ((isset($_SERVER['HTTP_REFERER']) && !preg_match('~^https://'.preg_quote($_SERVER['HTTP_HOST'], '~').'/~', $_SERVER['HTTP_REFERER']) || (! $_SERVER['HTTP_REFERER'] && isset($_POST['P_NOTI'])) ));
    return !isset($_COOKIE['PHPSESSID']) && count($_POST) && ((isset($_SERVER['HTTP_REFERER']) && !preg_match('~^https://'.preg_quote($_SERVER['HTTP_HOST'], '~').'/~', $_SERVER['HTTP_REFERER']) || ! isset($_SERVER['HTTP_REFERER']) ));
    }
     
    public static function submit($posts) {
 다음글 코드이그나이터에서 라이브러리 사용법에 대해 질문입니다. (1)
 이전글 파일 업로드후 DB 검색 오류 질문이요~ (4)

댓글

한대승(불의회상) / 2021/01/28 14:57:14 / 추천 0

크롬이 업그레이드 발생하면서 발생하는 이슈입니다.

http 접속시 https 로 리다이렉트 시켜주세요.
양가리 / 2021/01/28 15:02:24 / 추천 0

네 그런것으로 저도 추측하고 있는데

현재 환경이 http 환경이다 보니 어쩔수 없이 현재상태에서 해결해야 되서요 ㅠ.ㅠ

한대승(불의회상) / 2021/01/28 18:04:35 / 추천 0

@양가리 저희 회사도 방법을 찾을 수 없어서 https 로 바꾸어서 해결했습니다.

혹시 방법 찾으시면 공유 부탁드릴게요.

양가리 / 2021/01/29 13:49:21 / 추천 0

저도 방법을 몰라 질문은 했던것이고요 답변이 없어서 그냥 편법으로 해결을 하긴 했네요

어짜피 세션과 쿠키가 다 사라져 버려서 생기는 현상이라 해당세션과 필요한 부분에 대해 데이터 테이블을 하나 만들어 결재전에 데이터에 넣고 이니시스에서 받는 부분에서 해당세션을 다시 넣어줘서 해결했습니다.

아래 부분은 제가 한 부분인데 보안적인 측면에서는 어떨지 모르겠지만 어쨓든 결재는 잘 되고 있네요

참고하시라고 간단한 설명 남겨요

unique_id, order_cct_id, cct_key(카트에 넣는 고유값) 이렇게 3개의 필드를 만들어

cmall controller에서 order 부분에서 해당 데이터 값을 넣고 이니시스 결재가 진행하면 피시의 경우 inicisweb으로 데이터를 받는데

거기에서 이니시스에서 받은 주문번호가 있으면

$orderNumber = $this->input->post('orderNumber', true, 0);
 
if( !$orderNumber ){
alert("주문번호가 없습니다.");
} else {
$this->load->model('Cmall_pgtest_model');
$pgtest_result = $this->Cmall_pgtest_model->get_one($orderNumber);
if (! $pgtest_result) {
alert("주문내역이 없습니다.");
} else {
$this->session->set_userdata('unique_id', element('unique_id', $pgtest_result));
$this->session->set_userdata('order_cct_id', element('order_cct_id', $pgtest_result));
$this->session->set_userdata('cct_key', element('cct_key', $pgtest_result));
}
}
이렇게 세션을 다시 생성하고
마지막으로 업데이트를 실행하게 되면 다 정상적으로 되기는 합니다.
$this->orderupdate();

 

하지만 이 부분은 보안적으로는 검토가 되지 않아서 혹시 보안적으로 문제점이 있으면 알려주세요..

너무 억지로 한것 같아서 신경쓰이기는 합니다.

그리고 저희는 비회원도 구매할 수 있는 사이트로 하다보니 카트에 고유값을 쿠키에 넣어 이용하다보니 쿠키고유값을 이용하는데

orderupdate 부분에서 쿠키가 있는 경우와 없는 경우 부분도 설정을 바꿨네요 ^^

//일단 쿠키 고유값 확인 있으면 쿠키값 없으면 새로 생성한 세션으로 대체처리

$cct_key = get_cookie('cookie_idx') ? get_cookie('cookie_idx') : $this->session->userdata('cct_key');

회원전용이면 cct_key 변수와 이 부분은 없어도 될것 같네요

보안적으로 더 효율적인 방법이 있을지에 대해서는 계속 고민중입니다...

더 좋은 방법이 있으면 부탁드려요

한대승(불의회상) / 2021/01/29 16:17:50 / 추천 0
@양가리 공유감사합니다.
변종원(웅파) / 2021/02/01 11:35:39 / 추천 0

보통 결제전에 정보를 db에 저장하고 그 번호를 pg사로 전송하고 다시 리턴받아서 사용하는 구조니까 

그 번호에 해당하는 정보를 다시 세션에 넣어주면 처리가 되겠군요.

궁극적으로는 보안을 위해 https를 적용하셔야 합니다.