今天同事問了一個問題

A.php 用 Curl 去抓 B.php 。

然後 B.php 寫在 Session 的東西,

為什麼 A.php 抓不到 (當然 B.php 也抓不到 A.php 的值),

這是因為 curl 其實產生了另一個 session,

所以就算存了也抓不到。

當然也有解決的方法,就是使用 session_id()

程式如下:

A.php

function doHttpRequest($url, $args='') {
    $ch = curl_init();
    //Post Data
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'sid='.session_id());
                
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

session_start();
$_SESSION['aa']='[A.php]';
session_write_close();

$url = 'http://cw.dev.com/B.php';
echo doHttpRequest($url);

session_id(session_id());
session_start();
var_dump($_SESSION);

B.php

session_id($_POST['sid']);
session_start();
$_SESSION['bb']='[B.php]';
var_dump($_SESSION);

執行結果:

array  'aa' => string '[A.php]' (length=7)  'bb' => string '[B.php]' (length=7)
array  'aa' => string '[A.php]' (length=7)  'bb' => string '[B.php]' (length=7)

 

以上,記錄一下…

創作者介紹

Ching Wei : This is My Life - 工作、攝影、旅遊

Ching-Wei 發表在 痞客邦 留言(0) 人氣()