如何限制用户搜索?

时间:2011-05-24 16:45:36

标签: php mysql

我有一个PHP搜索引擎,很多人都在使用它。我想做的是当一个人搜索超过25次然后给他一个警告说你已超过今天的限制并且不允许进一步的saerch。

我怎么能用PHP mysql做到这一点?或者使用cookie或会话更好?如果是这样的话怎么办?

4 个答案:

答案 0 :(得分:2)

您可以使用用户ID(或任何其他唯一标识信息)在MySQL中创建一个表,一个表示当天的日期,以及一个计数器字段,每次搜索时您都可以增加1。然后在开始搜索之前检查计数器,如果计数器是25,则不允许搜索。

使用会话,APC,内存缓存,cookie等不保证您能够保持限制。

如果您使用APC或memcache或任何其他专为缓存而设计的系统,您的内存限制可能会耗尽,而您存储的密钥将会消失,从而允许用户进行25次新搜索。

如果您使用会话,则用户只需注销并再次登录即可获得25次新搜索。

如果您使用Cookie,用户只需在浏览器中更改或删除Cookie,即可再次进行新搜索。

永远不要相信用户或缓存系统。

答案 1 :(得分:1)

但是你可以用cookies来做到这一点:

  1. Cookie只能识别1台计算机上的1个浏览器。
  2. 可以删除Cookie。
  3. 因此,用户需要做的就是更改浏览器,计算机或清除他/她的cookie,并且他们有一组新的搜索。

    您可以使用会话变量来执行此操作:

    1. 除非您明确设置会话的到期时间,否则它将在浏览器关闭后结束。
    2. 因此,用户需要做的就是关闭并重新打开浏览器,然后他们会有一组新的搜索。

      因此,“最粘”选项是在数据库中存储增量的搜索计数,但是:

      1. 用户必须登录/创建帐户才能进行搜索,否则您必须依靠IP地址来识别用户,这不是100%可靠,而且可能太粗糙,无法满足您的需求。 / LI>

        尽管如此,这仍然是最好的选择。

        您可以通过多种方式设计和实施数据库架构,老实说,您如何做到这一点将真正依赖完全每天有多少用户+用户搜索。

        但是,基本算法(无论数据库设计如何)都是:

        1. 网站:用户登录/创建帐户
        2. MySQL:创建新用户记录
        3. 网站:用户执行搜索
        4. MySQL:检查以确保用户当天没有超过他/她的限制
          1. (TRUE)MySQL:返回错误消息
          2. (FALSE)MySQL:执行搜索并返回结果
        5. 网站:显示错误消息或结果

答案 2 :(得分:0)

session_start();
if ( isset($_POST['q']) ) { // insert your query parameter instead of 'q'
    // Determine if the search counter exists
    if (isset( $_SESSION['search_counter'] ) ) {
        if ( $_SESSION['search_counter'] > 25 ) {
            // Rate-limit message here
        }
    }
    else {
        // Create a session key to hold the search counter.
        $_SESSION['search_counter'] = 0;
    }
    // Increment the counter after every search.
    $_SESSION['search_counter']++;
}

答案 3 :(得分:0)

如果这些用户未登录,则在服务器端会话中存储数据是最可靠的方式,因为可以轻松清除cookie。但即使这样也可以规避。如果这确实是一个大问题 - 让他们进行身份验证,然后将这些数据绑定到他们的会话和服务器上的用户信息,如果它被清除,您可以仔细检查数据库,然后允许他们执行操作。这会抑制性能,因此您的里程可能会有所不同。