2013-03-31 125 views
0
<?php 
session_start(); 

//create array of data to be posted 
//traverse array and prepare data for posting (key1=value1) 
//set POST variables 
    $url = 'xxx/cart2.php'; 
    $fields = array(
     'ssl_merchant_id' => ('xxx'), 
     'ssl_user_id' => ('xxx'), 
     'ssl_pin' => ('xxx'), 
     'ssl_transaction_type' => ('xxx'), 
     'confirm_code' => ($_POST['confirm_code']), 
     'ssl_show_form' => ('xxx'), 
     'ssl_cardholder_ip' => ($_POST['ssl_cardholder_ip']), 
     'ssl_amount' => ($_POST['ssl_amount']) 
    ); 

//url-ify the data for the POST 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
rtrim($fields_string, '&'); 

//open connection 
$ch = curl_init('xxx/cart2.php'); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 

//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch); 
echo $result; 

?> 

每到這個代碼加載,它是創建一個新的會話!我如何去防止每次加載新會話?這只是我自己找到並修改的腳本,因爲我以前從未使用過cURL。捲曲會話問題

+0

你是什麼意思它開始一個新的會話? –

+0

您是否啓用了cookies? – Antony

回答

0

創建一個名爲「cookie.txt」可寫的文本文件。您將需要此來保存從cURL返回的會話數據。

$cookie_file = "cookie.txt"; 
if (!file_exists($cookie_file)) { 
    $handle = fopen($cookie_file, 'w') or die('Cannot open file: '.$cookie_file); 
} 
if (!is_writable($cookie_file) && !chmod($cookie_file, 0777)) { 
    die ("chmod() failed on file $cookie_file"); 
} 

這裏設置選項並告訴cURL保存cookie數據的位置。

curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie_file); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie_file); 

所以您發佈與捲曲的形式後,會話數據將被保存,它不會在每次運行腳本時加載一個新的會話。

+0

我已經寫過一個會話。 curl頁面創建一個新的會話,然後下一個頁面轉換回我設置的會話。爲什麼是這樣? – user2227936

+0

@ user2227936使用'session_start()'時,它會在您的網站上創建會話或使用現有會話。會話信息存儲在瀏覽器的Cookie中。當你做一個cURL來獲取一個頁面並提交一個表單時,你實際上做的是從**另一個**網站獲取內容(儘管它可以是同一個網站),而你的php頁面充當**代理**。因此,您需要定義一個cookie文件以保存該其他站點的會話信息。 – Antony