한 스크립트가 CURL을 사용하여 다른 스크립트를 호출 할 때 Session_Start가 타임 아웃을 일으키는 이유는 무엇입니까?

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

  •  05-07-2019
  •  | 
  •  

문제

전화하여 같은 세션을 사용하는 두 개의 PHP 스크립트가 있습니다. session_name('MySessID').

첫 번째 스크립트가 Curl을 사용하여 두 번째 스크립트를 호출하면 두 번째 스크립트는 session_start() 호출됩니다.

왜 이것이 일어날까요?

도움이 되었습니까?

해결책 2

왜 이런 일이 일어나는지 완전히 이해하지 못하지만 해결되었습니다.

이것 벌레 내가 겪고있는 것과 같은 문제를 설명합니다. 다른 스크립트에 게시하는 스크립트가 있습니다. 둘 다 같은 세션을 사용합니다, 분명히 PHP를 중단합니다.

그래서 전체 컬 포스트 스크립트를하기 전에 session_commit 함수, 따라서 호출 스크립트 세션을 종료하고 호출 된 스크립트가 세션을 다시 시작할 수 있도록합니다.

구타...

다른 팁

PHP 매뉴얼에서

http://php.net/manual/en/function.session-write-close.php

세션 데이터는 일반적으로 Session_write_close ()를 호출 할 필요없이 스크립트가 종료 된 후에 저장됩니다. 그러나 세션 데이터가 잠겨 동시 쓰기를 방지하기 위해 하나의 스크립트만이 세션에서 언제든지 작동 할 수 있습니다.. 프레임 세트를 세션과 함께 사용하면이 잠금으로 인해 프레임이 하나씩로드되는 프레임이 경험됩니다. 세션 변수에 대한 모든 변경 사항이 완료 되 자마자 세션을 종료하여 모든 프레임을로드하는 데 필요한 시간을 줄일 수 있습니다.

따라서 2 개의 스크립트가 동일한 세션 ATT를 동시에 사용할 수 없습니다.

나는 이것에도 물었다. StackoverFlow에 제공된 정보 덕분에 고정되었습니다.

두 페이지가 있었는데, 둘 다 상단에 "session_start ()"가 있었고 첫 번째는 두 번째를 컬로 호출하여 유효성 검사 후 두 번째 스크립트에 변수를 게시 할 수있었습니다. "session_write_close ()"를 추가 할 때까지 웹 서버가 매달려있었습니다.

코드 샘플은 다음과 같습니다.

// IMPORTANT (OR ELSE INFINITE LOOP) - close current sessions or the next page will wait FOREVER for a write lock.
session_write_close();

// We can't use GET because we can't display the password in the URL.
$host = $_SERVER['HTTP_HOST'];
$uri  = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$url  = "http://$host$uri/formPage2.php?";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); //append URL
curl_setopt($ch, CURLOPT_POST,TRUE);//We are using method POST
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_REQUEST, '', "&"));//append parameters    

curl_exec($ch); // results will be outputted to the browser directly
curl_close($ch);
exit();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top