+-------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default| Extra |
+-------+------------------+------+-----+------------+----------------+
| id| int(11) unsigned | NO | PRI | NULL | auto_increment |
| vdate | date | NO | | 2000-01-01 ||
| vnum | int(11) | NO | | 0 ||
+-------+------------------+------+-----+------------+----------------+
步骤二、建立一个java类,名字也为:visitorcounter,类的内容如下:
package com.hdzx.pub
import java.sql.ResultSet
import java.text.SimpleDateFormat
import java.util.Date
public class VisitorCounter {
private final static String TABLE_NAME = "visitorcounter"
private static String today = null
private static long today_num = 0
private static long total_num = 0
//加载访问量
public static void loadNum(){
if(total_num<1)
loadTotalNum()
if(today_num<1)
loadToadyNum()
}
//加载今日访问量
private static void loadToadyNum() {
// TODO Auto-generated method stub
DBConnect db = null
ResultSet rs = null
if(today==null)
today = getTodayDate()
String sql = "select vnum from "+TABLE_NAME+" where vdate='"+today+"'"
try {
db = new DBConnect()
rs = db.executeQuery(sql)
if(rs.next()){
today_num = rs.getLong("vnum")
}
else
{
sql = "insert into "+TABLE_NAME+"(vdate,vnum) values('"+today+"',0)"
db.executeUpdate(sql)
today_num = 0
}
} catch (Exception e) {
// TODO: handle exception
today_num = 0
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:获得访问人数")
}
}
//加载总访问量
private static void loadTotalNum() {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
DBConnect db = null
ResultSet rs = null
if(today==null)
today = getTodayDate()
String sql = "select vnum from "+TABLE_NAME+" where id=1"
try {
db = new DBConnect()
rs = db.executeQuery(sql)
if(rs.next()){
total_num = rs.getLong("vnum")
}
else
{
total_num = 0
}
} catch (Exception e) {
// TODO: handle exception
total_num = 0
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:获得访问人数")
}
}
//增加总的访问量
private static int incTotalCounter(){
int k = 0
DBConnect db = null
loadNum()
total_num = total_num+1
String sql = "update "+TABLE_NAME+" set vnum="+total_num+" where id=1"
try {
db = new DBConnect()
k = db.executeUpdate(sql)
} catch (Exception e) {
// TODO: handle exception
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:增加访问人数")
}
return k
}
//增加今日的访问量
public static int incTodayCounter(){
int k = 0
DBConnect db = null
String sql = null
loadNum()
today_num += 1
sql = "update "+TABLE_NAME+" set vnum="+today_num+" where vdate='"+today+"'"
try {
db = new DBConnect()
k = db.executeUpdate(sql)
if(k >0)
incTotalCounter()
} catch (Exception e) {
// TODO: handle exception
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:增加访问人数")
}
return k
}
//获得今天的日期
private static String getTodayDate(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")
return sdf.format(new Date())
}
///获得今日访问量
public static long getTodayNum(){
loadNum()
return today_num
}
//获得总的访问量
public static long getTotalNum(){
loadNum()
return total_num
}
}
步骤三、经过以上的步骤后,在页面中加入以下的代码,就可以实现网站访问量的统计工作:
if(session.isNew())
{
VisitorCounter.incTodayCounter()
}
%>
今日访问量:<%=VisitorCounter.getTodayNum() %><br/>
总的访问量: <%=VisitorCounter.getTotalNum() %>
给你个思路:比如要统计某一篇文章的访问次数。你应该能获取这篇文章所在的数据库的记录;然后把记录的ID保存在当前的session中。判断当前session中是否有这个ID了,如果没有的话,把这条记录的访问记录加1(前提是这条记录有字段去记录对应的访问次数),如果有的话,啥都不 *** 作。
保存在session中的话,如果在session有效期内,用户无论怎么刷新页面访问次数不会重复叠加,这样做有一个不好的地方就是如果session失效了,那么即使是同一台电脑再次访问这篇文章的话,记录还是会加1的。
因此有人提出保存在cookie中,只要用户不清理cookie,并且cookie设置永久不失效那么即使是同一台电脑在不同时间访问这个文章,那么之前已经统计过的话,这个是不会重复统计的。
两个方法都有优缺点,一般来说访问次数都是一个大概取值,所以上述两者其实都有人用的。
大约要三张表A表(地区名):
地区代码 地区名 总访问次数
1 广东省 0
2 江苏省 0
...
B表(日访问表)
地区代码 访问时间 日访问次数
1 20131224 0
8 20131224 0
C表(ip来源表)
序号 来访IP 地区代码 时间
处理流程基本上就是
1、先取用户ip,从ip库中查询出用户地区(这种代码随处可以找到,比如http://zhaoshijie.iteye.com/blog/1171132)一般就是纯真ip库,有了地区后,从A表中查出地区代码
2、向C表中添加记录
3、然后查一下B表有没有当日该地区记录,如果没有就在B表中新增一条,如果有就将B表对应的次数加1,然后A表中对应地区代码次数统计也加1
然后比如你要查2013年12月24日的各地区统计就可以是
select * from a,b where a.地区代码=b.地区代码 and b.访问时间=20131224
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)