동일한 세션을 사용하여 두 개의 PHP 스크립트가 있으며 session_name('MySessID')
을 호출합니다.한 스크립트가 컬을 사용하여 다른 스크립트를 호출 할 때 session_start가 시간 초과를 유발하는 이유
첫 번째 스크립트가 curl을 사용하여 두 번째 스크립트를 호출하면 session_start()
이 호출 될 때 두 번째 스크립트가 중단됩니다.
왜 이런 일이 발생합니까?
동일한 세션을 사용하여 두 개의 PHP 스크립트가 있으며 session_name('MySessID')
을 호출합니다.한 스크립트가 컬을 사용하여 다른 스크립트를 호출 할 때 session_start가 시간 초과를 유발하는 이유
첫 번째 스크립트가 curl을 사용하여 두 번째 스크립트를 호출하면 session_start()
이 호출 될 때 두 번째 스크립트가 중단됩니다.
왜 이런 일이 발생합니까?
왜 이런 일이 발생하는지 완전히 이해하지 못합니다.하지만 해결할 수 있습니다.
이 bug은 내가 겪고있는 것과 동일한 문제를 설명합니다. 다른 스크립트에 게시하는 스크립트가 있습니다. 모두 동일한 세션을 사용합니다.이 스크립트는 PHP를 사용합니다.
전체 컬 포스트 스크립트를 수행하기 전에 session_commit
함수를 호출하여 호출 스크립트 세션을 종료하고 호출 된 스크립트를 사용하여 세션을 다시 시작합니다.
내려 쳐 ... 스크립트가 session_write_close을 (를 호출 할 필요없이 종료 후
http://php.net/manual/en/function.session-write-close.php
세션 데이터는 일반적으로 저장되는 PHP 매뉴얼)에서
는 세션 데이터가 잠겨 있지만으로 동시 쓰기를 방지하기 위해 언제든지 하나의 스크립트 만 세션에서 작동 할 수 있습니다.. 세션과 함께 프레임 세트를 사용할 때이 잠금으로 인해 하나씩로드되는 프레임을 경험하게됩니다. 세션 변수에 대한 모든 변경이 완료 되 자마자 세션을 종료하여 모든 프레임을로드하는 데 필요한 시간을 줄일 수 있습니다.
그래서 두 개의 스크립트가 동일한 세션 시간을 사용할 수 없습니다.
나는 이것에 대해서도 물었습니다. 나는 stackoverflow에서 제공하는 정보 덕분에 그것을 고쳤습니다.
나는 두 페이지를 가지고 있는데, 둘 다 맨 위에 "session_start()"가 있었고 첫 번째는 curl로 두 번째 호출하여 유효성 검사 후 두 번째 스크립트에 변수를 POST 할 수있었습니다. 웹 서버가 "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();