我刚刚创建了一个网站,在管理面板中有一个非常重要的统计模块,可以识别用户是否第一次访问该网站(唯一)还是已访问该网站(原始)。
识别用户是否唯一,脚本检查ip是否相同或是否存在cookie(在同一天)。
if( isset( $_COOKIE['c'] ) && !empty( $_COOKIE['c'] ) && ctype_alnum( $_COOKIE['c'] ) ) {
$cookie = secure_field( $_COOKIE['c'] ); } else { $cookie = NULL; }
$res = mysqli_query( $con, "SELECT id FROM table WHERE ( ip = '$ip' OR id = '$cookie' )
AND DATE_FORMAT( datetime, '%d.%m.%y' ) = DATE_FORMAT( now(), '%d.%m.%y' )
ORDER BY datetime DESC LIMIT 1" );
if( mysqli_num_rows( $res ) == 0 ) { $unique = 1; } else { $unique = 0; }
和我一起这个脚本完美运行(我尝试使用很多浏览器,删除cookie,更改IP,......)。但现在我只是看到一个用户的奇怪行为,使用相同的IP,但它的所有访问都被注册为独一无二!
这里是注册记录(我已经掩盖了隐私权的IP):
2013-09-09 06:06:05 unique 112.201.***.*** Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (K...
2013-09-09 06:06:14 unique 112.201.***.*** Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (K...
2013-09-09 06:11:58 unique 112.201.***.*** Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (K...
2013-09-09 06:14:11 unique 112.201.***.*** Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (K...
2013-09-09 06:17:05 unique 112.201.***.*** Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (K...
2013-09-09 06:17:15 unique 112.201.***.*** Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (K..
这有可能吗?以及如何解决这个问题?
答案 0 :(得分:0)
您永远不会设置$res
,因此mysqli_num_rows
会产生警告并导致false
等于0
。因此请求将始终是唯一的。
如果你正确插入ip并且sql是正确的,这应该可行:
$res = mysqli_query( $con, "SELECT id FROM table WHERE ( ip = '$ip' OR id = '$cookie' )
AND DATE_FORMAT( datetime, '%d.%m.%y' ) = DATE_FORMAT( now(), '%d.%m.%y' )
ORDER BY datetime DESC LIMIT 1" );
if( mysqli_num_rows( $res ) == 0 ) { $unique = 1; } else { $unique = 0; }
也: 你真的把ip插入表中吗?
您是否在phpmyadmin中手动检查了查询?这有用吗?