CI 묻고 답하기

제목 ci4 컨트롤러 내 변수를 바꾸고 다시 호출했을때 값을 유지하는 방법이 있나요?
카테고리 CI 4 관련
글쓴이 kasumil 작성시각 2022/12/20 12:07:17
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 5030   RSS

안녕하세요.

결제 시스템 연동중입니다.

순수 php를 ci4에 맞춰 수정중입니다만,

팝업창을 띄울 경우 세션 등이 새로 생성되지 않아 쉽게 갈 곳을 어렵게 가고 있어 고민이 많아서 질문드립니다.

ci4 컨트롤러 내 변수를 바꾸고 다시 호출했을때 값을 유지하는 방법이 있나요?

php 샘플로는 include한 변수에 값을 저장하고 이를 뽑아 쓰는 방식이더군요.

 

문제는 사이트 -> 외부 도메인-> 사이트에 있는 최종 컨펌 redirect 주소

이동하고 다시 돌아오는데 ci4 컨트롤러에 저장된 값을 다시 못 가져오고 있습니다.

 

원인을 찾은 것 같습니다. 팝업창 생성시 세션이 자동으로 끊기나보네요.

해당 문제로 인해서 세션을 몰라 해당 부분에서 class값으로 접근이 불가능한 것 같습니다.

해당 페이지 접근시 세션 사라지는데, 원인이 뭘까요? ㅠㅠ

 다음글 ci4 파일첨부 ajax 전송시 controller에서... (1)
 이전글 터미널로 php 실행하면 php fatal error ... (1)

댓글

PureAni / 2022/12/20 14:24:56 / 추천 1

팝업이 외부 도메인으로 보입니다.

이 경우 세션이 끊기는게 보안상의 이유로 맞습니다.

 

변수를 바꾸신다고 하셨는데, 어느 위치에서 어떤 값을 바꾸시는건가요?

만약에 사이트(변수값 A -> B) -> 팝업 -> 사이트 리다이렉트(변수값 B) 를 원하시는거라면 첫번째 스탭에서 변수를 변경하여서 세션에 저장후 리다이렉트에서 세션에 저장됀 값을 가져오시면 됄듯합니다.

kasumil / 2022/12/20 14:33:59 / 추천 0

PureAni  //

맞습니다. 세션이 생성 안되고 있어 생성되게 수정하고,

외부 도메인으로 이동전에 사이트 세션값에 저장하였더니, 외부도메인을 거쳐들어오면 세션이 끊어지고 새로 생성되는군요;;; ㅠㅠ

현재 로직은

사이트에서 팝업으로 출력됨과 동시에 함수용 class 내 public된 변수 값에 저장하고, 외부 도메인에서 결제 처리를 하고, 다시 재검증시 해당 가격을 불러오려고 하는데, 세션이 끊어지니 다시 가져올 수 가 없어서요... ㅠ

kasumil / 2022/12/20 15:11:17 / 추천 0

찾았네요. 저랑 같은 문제... ㅠㅠ

http://w.codeigniter-kr.org/bbs/view/etc_qna?idx=14884&page=47&hit=not

kaido / 2023/01/05 15:14:38 / 추천 0

과거에 제가 보이는군요 ㅎㅎ

저때는 어렵게 설명 드린것 같은데 간단한 이유입니다.

세션은 끊긴게 아닙니다. 세션은 살아있어요.

PG사에서 다시 리다이렉션으로 들어올때 요청이  [내가] 요청한게 아니라 [PG사]가 요청하기 때문에 [다른] 세션이 되는겁니다.

세션이든 redis 이든 어딘가에 invoice 에 해당하는 값을 넣어놓고 invoice에 필요한 세션데이터를 가져와서 다시 진행 시키는것입니다.

그래서 비동기 방식 PG 만들때  임시저장용 결제 테이블을 만들고 결제완료 테이블을 따로 만듭니다.

임시저장 결제 테이블은 invoice 즉 key 값으로서 만들어놓고 PG사에 전달하고 PG사는 invoice에 해당하는 값을 같이 다시 보내줍니다.

그러면 임시저장 결제 테이블의 데이터를 가져와서 결제 완료 테이블로 데이터를 만듭니다.

이렇게 나누면 결제 시도 횟수와 결제 완료 횟수가 다름을 바로 비교할수도 있습니다.

kasumil / 2023/03/03 23:16:20 / 추천 0

@kaido / 해당 방법으로 진행이 어려워 진행하지 못하였습니다.

PG사 결제모듈을 여러사이트에 적용가능하도록 하였는데, 이를 세션기반으로 적용하였습니다.

문제는 다시 돌아올때, 세션이 접근이 안되는 문제가 있었는데 이를 죽은 세션을 다시 사용하는 방법도 있더군요.

해당 방법으로 진행하여 결제하는데 문제 없이 진행완료하였습니다 ㅎㅎㅎ

아무튼, 답변 감사합니다.