I have two PHP scripts, both using the same session by calling session_name(\'MySessID\')
.
When the first script calls the second script using curl, the
I don't totally understand why this happens, but I got it solved.
This bug describes the same problem I'm having. I have a scripts posting to another script, both using the same session, which apparently stalls PHP.
So, before I do the whole curl post script, I call the session_commit
function, so ending the calling scripts session, and enabling the called script to restart the session.
Whack...
I got bitten by this as well. I fixed it thanks to the info provided in stackoverflow.
I had two pages, both had "session_start()" at the top and the first was calling the second with curl so I could POST variables to the second script after validation. The webserver was hanging until I added "session_write_close()".
Code sample follows:
// 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();
From the php manual
http://php.net/manual/en/function.session-write-close.php
Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done.
So you can not have 2 scripts use the same session att the same time.