我有一个任务,将用户搜索限制为每天 10 次查询。
我在用户表中添加了列 count_search
该列从 0 开始,随着使用搜索而上升到 10。一旦他达到 10,查询就会中断。此值在 24 小时后重置为 0。
这一切都相对简单。我的问题是分页。
我无法区分新的搜索和分页查询,因此即使浏览页面,count_search也会上升。
我有哪些选择?
我可以想到一件事,只需获取所有数据并使用jquery进行分页浏览器端。
有什么想法,类似问题的解决方案吗?
您可以缓存查询(文本查询,而不是结果)并从缓存中获取它。如果它在缓存中,请不要 +1,如果不是,则它是一个新查询。缓存可以是$_SESSION
,APC,数据库等。
function query_results( $sqlWithoutPager ) {
if ( $sqlWithoutPager not exists in user's cache ) {
counter++
}
if ( counter > 10 ) {
// I think not!
return
}
// add pager to query
// do query and return 1 page of results
}
我只保存查询缓存,而不是计数器,因为缓存长度是计数器。更多数据库表。
$_SESSION
可能是一个坏主意,因为用户可以终止他们的会话并启动一个新会话(可能)。
APC 会起作用,但我不知道你是否有它,(而且它不是持久的)。
我选择了客户端分页,因为这似乎是实现配额问题的最干净方法。