我正在构建一个基于需要基本身份验证的API构建的应用程序。我已经做了很多调用并将CURL请求包含在我已经创建的类中,
我正在使用像我这样使用的饼干罐:
curl_setopt($curl_handle, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($curl_handle, CURLOPT_COOKIEFILE, "cookie.txt");
我试图通过使用cookie.txt保存会话来存储cookie,并且它一直很好用。然而,今天我遇到了一个惊人的发现。当其他人(在另一台计算机上)转到我的应用程序时,他们可以看到我的会话信息(可能是因为它使用的是与会话参考相同的文件)。我想也许我可以为每个访客生成一个新的“饼干罐”,但这可能在它投入生产时不起作用。用户数量至少会达到数千,所以我认为这意味着每次访问都需要一个cookie文件?
这似乎不实用,更不用说我必须以编程方式创建cookie文件。有没有人以前遇到过这个问题?任何建议都是真正的帮助。
也许有一个CURL setopt解决方案可以在访问中唯一地分发cookie?
谢谢!
答案 0 :(得分:1)
如果你可以将cookie暴露给用户,如果你打开curl_setopt($ curl_handle,CURLOPT_HEADER,1),那么curl exec返回的标题将出现在内容的顶部,你可以将这些内容与内容的顶部进行匹配,并将它们传递给客户端浏览器以进行保留,然后将任何用户cookie通过curl进程传递回下一个请求。
我之前做过的一些简单的事情: if(is_array($_COOKIE))
{
foreach($_COOKIE as $cookiename => $cookievalue)
{
if($cookievalue)
{
if(get_magic_quotes_gpc())
{
$cookievalue = stripslashes($cookievalue);
}
$cookies[] = $cookiename .'='. urlencode($cookievalue);
}
}
if(is_array($cookies))
{
curl_setopt($curl_handle, CURLOPT_COOKIE,implode('; ',$cookies));
}
}
在卷曲执行后
preg_match_all('%HTTP/\\d\\.\\d.*?(\\r\\n|\\n){2,}%si', $curl_result, $header_matches);
$headers = split("\r\n", str_replace("\r\n\r\n",'',array_pop($header_matches[0])));
if(is_array($headers))
{
foreach ($headers as $header)
{
preg_match('#(.*?)\:\s(.*)#', $header, $header_matches);
if(isset($header_matches[1]))
{
$headers[$header_matches[1]] = $header_matches[2];
}
// SET THE COOKIE
if($header_matches[1] == 'Set-Cookie')
{
header('Set-Cookie: ' . $header_matches[2],false);
}
}
}
# Remove the headers from the response body
$curl_result = preg_replace('%HTTP/\\d\\.\\d.*?(\\r\\n|\\n){2,}%si','',$curl_result);