我不是在寻找一个具体的答案,而是一个大致的方向。
最近,我决定制作自己的统计插件。我知道外面有很多,但我想做我自己的。我想,这有多难?只需创建一个表,记录IP,并在每次页面刷新时将数据存储在表中。
我的问题是,这些数据似乎太高了。我已经在一批PR为1的测试网站上部署了我的插件,该插件显示了数千次访问,我知道不会有太多的独特之处。
以下是整个插件:https://gist.github.com/1469300
这是我的process visitor函数。
/**
* Process visitor
*
* Checks whether used is "logged" or not,
* Adds the user to the unique table if not logged,
* adds a hit using the user_id if she is logged
*
*/
function vsp_process_visitor() {
global $wpdb;
$visits_table = $wpdb->prefix . "vsp_visits";
if ( vsp_visitor_logged_in() ) {
vsp_update_count();
}
if ( !vsp_visitor_logged_in() ) {
vsp_new_record( $visits_table );
}
}
下面是检查会话是否已设置。
/**
* Checks user state
*
* Checks whether a user session is set
* Logged in if set
*
*/
function vsp_visitor_logged_in() {
$logged_in = false;
if ( isset( $_SESSION[ \'vsp_user\' ] ) ) {
$logged_in = true;
}
return $logged_in;
}
下面是插入数据的函数。
/**
* Creates new unique and hit
*
* Inserts data into the unique table and the
* hits table, if allowed.
*
*/
function vsp_new_record( $table ) {
$ip = get_ip();
global $wpdb;
$hits_table = $wpdb->prefix . "vsp_hits";
/*
Insert data into the visitors table
*/
$data = array ( \'ip\' => $ip );
if ( valid_time($table) ) {
$wpdb->insert ( $table, $data );
}
$userID = $wpdb->get_var( \'select `id` from \' . $table . \' where `ip` = "\' . $ip . \'" order by `id` desc limit 1;\');
$_SESSION[ \'vsp_user\' ] = $userID;
/*
Insert data into the hits table
*/
$data = array( \'visit_id\' => $userID );
if ( valid_time($hits_table) ) {
$wpdb->insert ( $hits_table, $data );
}
}
代码在刷新时执行。我的问题是,当搜索机器人访问我的网站时,它是否会“触发”页面刷新,并在我的统计数据库中创建一个表,从而扭曲我的结果。
应用程序逻辑
用户来到站点问题:会话是否已设置?如果否,则使用用户的IP创建会话,并添加hit和UNIQUE如果是,则使用用户的IP添加hit
我错过了什么吗?