要统计页面的数量,我们必须把用户的从哪个页面到哪个页面插入数据库中,再由存储过程计算出各个页面
访问数量。我只说如何把来源页面和目的页面插入到数据库。
一般情况下,来源页面是为 Page.Request.ServerVariables["HTTP_REFERER"],目的页面
为Page.Request.ServerVariables["SCRIPT_NAME"],
但有特殊情况下来源页面通过前面方法得不到的
有两种情况是不能用上面的方法:
1.当目的页面是pop页面时,火狐浏览器是可以让来源页面通
过Page.Request.ServerVariables["HTTP_REFERER"],但ie浏览器就不行了。
那我们如何获取来源页面了,我们通过cookie来存上个页面的目的页面,如果再点击就把上个页面存的目的
页面存成此此页面的来源页面。
if(Page.Request.ServerVariables["HTTP_REFERER"]==null)就取上个页面的目的页面,否则就
取Page.Request.ServerVariables["HTTP_REFERER"]。
2当用户按F5或右键刷新时,我们要避免把数据插入到数据库。那就要我们判断用户是否做了此操作。
其实就是判断用户是否刷新。当然可在js设置个标志位来判断,但这样要每个页面都写。
我选择在服务器端来判断,但有一点小问题。
我判断上次点击的的来源页面和目的页面是否跟下一次的页面相同,如果相同则认为是刷新了。
代码如下
1 if (Request.Cookies["ips"]["LastOriginalPagePath"] != null && Request.Cookies["ips"]
2
3["LastDestinationPagePath"] != null)
4 {
5 if (Request.Cookies["ips"]["LastOriginalPagePath"].ToString() !=
6
7Request.Cookies["ips"]["LastDestinationPagePath"].ToString())
8 {
9 if(Page.Request.ServerVariables["HTTP_REFERER"] !=
10
11null&&Page.Request.ServerVariables["SCRIPT_NAME"]!=null)
12 {
13 if (Request.Cookies["ips"]["LastOriginalPagePath"].ToString() ==
14
15Page.Request.ServerVariables["HTTP_REFERER"].ToString() && Request.Cookies["ips"]
16
17["LastDestinationPagePath"].ToString() ==
18
19Page.Request.ServerVariables["SCRIPT_NAME"].ToString())
20 {
21 bolIsReFresh = true;
22 }
23
24 }
25 }
26 }
27Response.Cookies["ips"]["LastOriginalPagePath"] = Page.Request.ServerVariables["HTTP_REFERER"];
28 Response.Cookies["ips"]["LastDestinationPagePath"] =
29
30Page.Request.ServerVariables["SCRIPT_NAME"];
31
但不足之处就是当点击的页面还是到本页面,此种方法就不能判断了。
如果要做得完美,只能在这样的页面js上做处理。