PHP 세션이 종료되는 이유는 무엇입니까?왜 복원할 수 없나요?

StackOverflow https://stackoverflow.com/questions/183932

  •  06-07-2019
  •  | 
  •  

문제

PHP와 PayPal API를 사용하는 앱이 있습니다.결제를 받는 기본 방법은 PayPal에 웹 서비스 호출을 수행하여 토큰을 받은 다음 사용자가 결제할 수 있도록 해당 토큰을 사용하여 PayPal로 브라우저를 리디렉션하는 것입니다.결제 세부정보가 확인되면 PayPal은 서비스 호출에서 원래 설정한 URL로 다시 리디렉션됩니다.

이것은 모두 작동하며 수백만 명의 사람들이 매일 그것을 사용합니다.

이상한 점은 PayPal이 다시 리디렉션할 때 PHP 세션이 사라진다는 것입니다.그것은 잘 문서화된 문제.

첫 번째 질문:왜 이런 일이 일어나는 걸까요?두 페이지 모두 동일한 도메인에 있으며 둘 다 HTTPS를 사용합니다.세션은 PayPal이 다시 리디렉션될 때까지 모든 요청에 ​​대해 작동합니다.

링크된 포럼 스레드는 PayPal 요청에서 세션 ID를 유지한 다음 나중에 이를 검색하여 세션을 복원하는 해결 방법을 제안합니다.좋습니다. 작동하지 않는 것 같습니다.

몇 가지 로그 문을 추가할 수 있습니다.

log(session_id());

다양한 리디렉션 전후.PayPal에서 돌아올 때 좀 더 기록합니다.

log("session id is " . session_id());
$session_id = get_session_id_from_paypal();
log("setting it back to " . $session_id);
session_id($session_id);
session_start();
log("session id is now " . session_id());

결과는 내가 기대했던 것과 전혀 다릅니다.

session_id fc8f459a186a3f4695ff9ac71b563825입니다
82460dcf8c8ddd538466e7cb89712e72로 다시 설정
session_id 지금은 360ba3fd99d233e0735397278d2b2e55입니다.

두 번째 질문:왜 세션 ID가 내가 설정한 것과 전혀 다른가요?내가 도대체 ​​뭘 잘못하고있는 겁니까?아니면 적어도 세션 변수가 다시 나타나지 않는 이유는 무엇입니까?

도움이 되었습니까?

해결책

그냥 아이디어 ...

당신은 가지고 있습니까? session.referer_check 호스트로 설정하시겠습니까?기본값은 빈 문자열이지만 변경되었을 수도 있습니다.PayPal에서 페이지가 '돌아오면' PHP는 세션 정보를 삭제합니다.

당신은 확인할 수 있습니다 session.referer_check phpinfo()를 사용합니다.

다른 팁

phpinfo()를 수행하고 session.auto_start가 true인지 알 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top