2012-04-02 83 views
1

我有2個相同但數據庫和數據不同的站點。一個網站是www.somesite.com,另一個是sub.somesite.com。我所做的是,如果有人登錄到www.somesite.com並且登錄詳細信息與www.somesite.com不匹配,但他們確實匹配sub.somesite.com,然後使用cURL提交信息並將其登錄。我有捲曲偉大工作:cURL登錄在重定向時丟失會話變量

foreach($_POST as $key=>$p) { 
    if ($post != "") { 
    $post .= "&"; 
    } 
    $post .= $key."=".$p; 
} 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://sub.somesite.com"); 
curl_setopt($ch, CURLOPT_POST, count($_POST)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 
$cArray = curl_getinfo($ch); 
$newURL = $cArray[url]; 
echo str_replace('</head>','<base href="'.$newURL.'" /></head>',$result); 
curl_close($ch); 

這樣做是收集後的變量,並提交給其他網站,並增加了一個基本的URL,這樣的路徑是正確的。

我遇到的問題是之後的任何其他頁面。所以說我在somesite.com上提交數據。即使它是去sub.somesite.com/welcome.php,它會顯示在地址欄somesite.com,並且信息存儲在cookies.txt中。現在,當我點擊sub.somesite.com/page.php上的鏈接(sub.somesite.com/page2.php)時,它會重定向到登錄頁面,因爲會話位於cookies.txt中,現在無法訪問。

如何讓會話繼續在所有頁面上工作?

在此先感謝。

回答

0

這是因爲CURL在服務器上而不是客戶端(瀏覽器)上執行它。您的服務器可能擁有用戶cookie,但用戶不會。

您想使用setcookie來設置瀏覽器的Cookie,並忘記Curl。

+0

有道理,但它們使用$ _SESSION而不是$ _COOKIE。我想我將不得不改變這兩個網址?第一個設置cookie,第二個查找cookie並轉換爲會話? – fanfavorite 2012-04-02 01:37:37

+0

好吧,也許將會話cookie(通常名爲PHPSESSID)傳遞給客戶端,然後重定向,將使其工作。 – Janhouse 2012-04-02 01:45:22

+0

但忘了捲曲。您可以使用session_set_cookie_params來設置該域的會話cookie - http://php.net/manual/en/function.session-set-cookie-params.php – Janhouse 2012-04-02 01:45:56