统计访问量时的刷新问题以及接口防刷

目录

需求

调研

js判断键盘是否按了F5刷新

js判断浏览器访问,刷新,返回

防止其他不正当访问及接口防刷


需求

需求:统计某个页面访问量,用户状态不限制
需要排除非正常进入页面的方式,比如刷新或者其他不正当手段,接口防刷

调研

用户刷新页面的方式:键盘F5 或者 浏览器的刷新,通过调研发现,两种方式都可以被监听到
避免其他不正当手段访问页面:页面参数都不可作为判断依据,可携带唯一标识

js判断键盘是否按了F5刷新

直接上代码
 

<script>
    document.onkeydown = function (e) {//键盘按键控制
        e = e || window.event;
        if ((e.ctrlKey && e.keyCode == 82) || //ctrl+R
            e.keyCode == 116) {//F5刷新,禁止
            setTimeout(function () { alert('按下F5或者CTRL+R'); }, 100);//延时提醒,要不alert会导致return false被alert挂起从而浏览器执行了刷新
            return false
        }
    }
    document.write(new Date().getTime())
</script>

js判断浏览器访问,刷新,返回

代码:
 

if (window.performance.navigation.type === 0/* 正常访问 */) {
  // 你要干的事
} else if (window.performance.navigation.type === 1/* 刷新 */) {
  // 你要干的事
} else if (window.performance.navigation.type === 2/* 返回 */) {
  // 你要干的事
} else {
  // 其他你要干的事
}

补充关于window.performance.navigation.type:
performance.navigation.type(该属性返回一个整数值,表示网页的加载来源,可能有以下4种情况):
  0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATE。
  1:网页通过“重新加载”按钮或者location.reload()方法加载,相当于常数performance.navigation.TYPE_RELOAD。
  2:网页通过“前进”或“后退”按钮加载,相当于常数performance.navigation.TYPE_BACK_FORWARD。
  255:任何其他来源的加载,相当于常数performance.navigation.TYPE_RESERVED。
performance.navigation.redirectCount:表示网页经过重定向的次数。

防止其他不正当访问及接口防刷

接口防刷思路:
进入页面时,服务端生成一个唯一token,在页面提交时,带上token,服务端验证是否我签发的,是就通过,并作废该token当然,用户也可以默认请求token,并带上它,你可以从ip访问频率或用户访问频率进行限制
Token 机制在每次请求 API 的时候,都需要带上一个 Authorization的 Http Header 。
关于这个页面被刷的疑问:1.如果进入页面就统计数量的话,接口有什么被刷的必要?(没有好处什么人会去刷,如果是正常人多次频繁进入的话,是不是可以通过IP限制?)2. 如果是统计通过这个页面做了某些操作的埋点的话,是不是可以针对操作本身做一个限制?

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值