2011-07-12 93 views
0

我搜遍了所有,但沒有看到任何與此問題相關的任何內容。我有一個curl腳本,可以從網站獲取隨機生成的10個字符的字符串。我已獲得網站所有者的許可,以獲取此數據並將其顯示在我的博客上。我的問題是當用戶訪問我的網站時顯示字符串,如果刷新頁面,它將顯示一個新的字符串。我怎樣才能限制每個用戶一個字符串,以便他們不能一遍又一遍刷新以獲取多個字符串?每用戶限制捲曲請求

下面是一個例子捲曲在其中我的代碼是基於:

$url = "http://m.www.yahoo.com/"; 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($ch); 

preg_match('/<dl class="markets clearfix strong small">(.*)<\/dl>/is', $output, $matches); 
echo $matches[0]; 

curl_close($ch); 
+2

你試過會話或cookie?或者,如果您需要更高級的解決方案,只需要用戶登錄並將生成的字符串設置爲某些用戶的字段。 – Robik

+0

您可以更進一步,使用數據庫,memcache或文件作爲每個ip /用戶代理組合的計數器,因此用戶不能清除cookie以獲得一組新的curl請求。 –

+0

@Robik我會把'$ matches [0];'放在會話中嗎? – sarsar

回答

0

也許你可以使用會話變量來檢查,如果用戶已經有了一個字符串。

function startSession(){ 
    $id = session_id(); 
    if ($id != '') 
     session_write_close(); 

    if (isset($_COOKIE['PHPSESSID']) && $id != $_COOKIE['PHPSESSID']) { 
     session_write_close(); 
     session_id($_COOKIE['PHPSESSID']); 
    } 

    session_start(); 
} 

//Start your sessions 

startSession(); 
if (!$_SESSION['UserGotAString']) { 
    echo "Some Error msg" 
    return; 
} 
session_write_close(); 

//Request to Yahoo and regex match comes here.. 

// Start a session 
startSession(); 
$_SESSION['UserGotAString'] = true 
echo $matches[0]; 
session_write_close(); 

林不知道這是一個好方法。此外,如果你想重置會話變量基於計時器檢查此鏈接 Set timeout in php