同时运行php脚本的用户
我有一个简单的php脚本,它发出一个curlHTTPPOST请求,然后通过重定向向用户显示数据。我遇到的问题是,如果不止一个人同时运行脚本,它将为一个人成功执行并完成,但为另一个人失败。我认为它可能与会话或cookie有关,但我没有使用session_start(),cookie在重定向之前会被清除 为什么会发生这种情况?我可以调整脚本以支持同步用户吗同时运行php脚本的用户,php,curl,session-cookies,simultaneous,simultaneous-calls,Php,Curl,Session Cookies,Simultaneous,Simultaneous Calls,我有一个简单的php脚本,它发出一个curlHTTPPOST请求,然后通过重定向向用户显示数据。我遇到的问题是,如果不止一个人同时运行脚本,它将为一个人成功执行并完成,但为另一个人失败。我认为它可能与会话或cookie有关,但我没有使用session_start(),cookie在重定向之前会被清除 为什么会发生这种情况?我可以调整脚本以支持同步用户吗 <?php $params = "username=" . $username . "&password=" .
<?php
$params = "username=" . $username . "&password=" . $password . "&rememberusername=1";
$url = httpPost("http://www.mysite.com/", $params);
removeAC();
header(sprintf('Location: %s', $url));
exit;
function removeAC()
{
foreach ($_COOKIE as $name => $value)
{
setcookie($name, '', 1);
}
}
function httpPost($url, $params)
{
try {
//open connection
$ch = curl_init($url);
//set the url, number of POST vars, POST data
// curl_setopt($ch, CURLOPT_COOKIEJAR, "cookieFileName");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//execute post
$response = curl_exec($ch);
//print_r(get_headers($url));
//print_r(get_headers($url, 0));
//close connection
curl_close($ch);
return $response;
if (FALSE === $ch)
throw new Exception(curl_error($ch), curl_errno($ch));
// ...process $ch now
}
catch(Exception $e) {
trigger_error(sprintf(
'Curl failed with error #%d: %s',
$e->getCode(), $e->getMessage()),
E_USER_ERROR);
}
}
?>
如果我理解正确,您访问的站点使用会话/cookie,对吗?要解决此问题,请尝试为每个请求创建一个唯一的cookie jar:
// at the beginning of your script or function... (possibly in httpPost())
$cookie_jar = tempnam(sys_get_temp_dir());
// ...
// when setting your cURL options:
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
// at the end of your script or function (when you don't need to make any more requests using that session):
unlink($cookie_jar);
为每个请求创建一个唯一的cookie jar文件?这一行中缺少一个引号:
$url=httpPost(“http://www.mysite.com/,$params);
你我的朋友应该得到一个奖项。我必须稍微调整一下它,这样它就可以在Windows和Linux测试的基础上工作。此外,这很有魅力。非常感谢!@TajMorton