あるスクリプトがcurlを使用して別のスクリプトを呼び出すと、session_startがタイムアウトを引き起こすのはなぜですか

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

  •  05-07-2019
  •  | 
  •  

質問

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();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top