あるスクリプトがcurlを使用して別のスクリプトを呼び出すと、session_startがタイムアウトを引き起こすのはなぜですか
質問
2つのPHPスクリプトがあり、どちらも session_name( 'MySessID')
を呼び出して同じセッションを使用しています。
最初のスクリプトがcurlを使用して2番目のスクリプトを呼び出すと、 session_start()
が呼び出されると2番目のスクリプトがハングします。
なぜこれが起こったのですか?
解決 2
これがなぜ起こるか完全にはわかりませんが、解決しました。
このバグは、私が抱えている同じ問題を説明しています。別のスクリプトに投稿するスクリプトがあり、同じセッションを使用しています、明らかにPHPが停止します。
したがって、カールポストスクリプト全体を実行する前に、 session_commit
関数を呼び出して、呼び出し元のスクリプトセッションを終了し、呼び出されたスクリプトがセッションを再開できるようにします。
強打...
他のヒント
PHPマニュアルから
http://php.net/manual/en/function。 session-write-close.php
セッションデータは通常、session_write_close()を呼び出すことなくスクリプトが終了した後に保存されますが、セッションデータは同時書き込みを防ぐためにロックされているため、いつでも1つのスクリプトのみがセッションで動作できます。セッションとともにフレームセットを使用すると、このロックによりフレームが1つずつロードされます。セッション変数へのすべての変更が完了するとすぐにセッションを終了することにより、すべてのフレームをロードするのに必要な時間を短縮できます。
したがって、2つのスクリプトが同時に同じセッション属性を使用することはできません。
これにも噛まれました。 stackoverflowで提供される情報のおかげで修正しました。
2つのページがあり、どちらも" session_start()"でした。一番上で、1つ目はcurlで2つ目を呼び出していたため、検証後に2つ目のスクリプトに変数を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 = これにも噛まれました。 stackoverflowで提供される情報のおかげで修正しました。
2つのページがあり、どちらも" session_start()"でした。一番上で、1つ目はcurlで2つ目を呼び出していたため、検証後に2つ目のスクリプトに変数をPOSTできました。 " session_write_close()"を追加するまで、ウェブサーバーはハングしていました。
コードサンプルは次のとおりです。
<*>SERVER['HTTP_HOST'];
$uri = rtrim(dirname(これにも噛まれました。 stackoverflowで提供される情報のおかげで修正しました。
2つのページがあり、どちらも&quot; session_start()&quot;でした。一番上で、1つ目はcurlで2つ目を呼び出していたため、検証後に2つ目のスクリプトに変数をPOSTできました。 &quot; session_write_close()&quot;を追加するまで、ウェブサーバーはハングしていました。
コードサンプルは次のとおりです。
<*>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(これにも噛まれました。 stackoverflowで提供される情報のおかげで修正しました。
2つのページがあり、どちらも&quot; session_start()&quot;でした。一番上で、1つ目はcurlで2つ目を呼び出していたため、検証後に2つ目のスクリプトに変数をPOSTできました。 &quot; session_write_close()&quot;を追加するまで、ウェブサーバーはハングしていました。
コードサンプルは次のとおりです。
<*>REQUEST, '', "&"));//append parameters
curl_exec($ch); // results will be outputted to the browser directly
curl_close($ch);
exit();