我有一个php脚本,它会在服务器上发出一系列请求。第一个请求是登录请求。
问题是file_get_contents
似乎每次都会创建一个新会话,那么如何才能使会话识别呢?
这是我的功能,需要让它记住会话:
function request($method, $data, $url){
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n"."Cookie: ".session_name()."=".session_id()."\r\n",
'method' => $method,
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
session_write_close();
$result = file_get_contents($url, false, $context);
return $result;
}
答案 0 :(得分:1)
我只使用curls而不是file_get_contents,一切都适合我:
function request_url($method='get', $vars='', $url) {
$ch = curl_init();
if ($method == 'post') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt');
$buffer = curl_exec($ch);
curl_close($ch);
return $buffer;
}
答案 1 :(得分:1)
解释为什么Cookie在Hazem's answer中的cURL中工作。
魔术发生在CURLOPT_COOKIEJAR
和CURLOPT_COOKIEFILE
。
CURLOPT_COOKIEJAR
告诉cURL将所有内部已知的Cookie写入指定的文件。在这种情况下,' cookies / cookies.txt'。对于大多数用户,通常建议使用tempnam('/tmp', 'CURLCOOKIES')
之类的内容,以便您确定可以生成此文件。
CURLOPT_COOKIEFILE
告诉cURL在cURL请求期间用于Cookie的文件。这就是为什么我们将它设置为我们刚刚将Cookie转储到同一文件的原因。