如何识别file_get_contents会话?

时间:2016-02-17 14:10:11

标签: php http web backend

我有一个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;
}

2 个答案:

答案 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中工作。

Author: Nate I

魔术发生在CURLOPT_COOKIEJARCURLOPT_COOKIEFILE

CURLOPT_COOKIEJAR告诉cURL将所有内部已知的Cookie写入指定的文件。在这种情况下,' cookies / cookies.txt'。对于大多数用户,通常建议使用tempnam('/tmp', 'CURLCOOKIES')之类的内容,以便您确定可以生成此文件。

CURLOPT_COOKIEFILE告诉cURL在cURL请求期间用于Cookie的文件。这就是为什么我们将它设置为我们刚刚将Cookie转储到同一文件的原因。