2011-07-12 65 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