小编说:页面有效期访问,主要实现成员在进入页面后仅能在一段时间内进行操作,对于超过规定时间的成员将禁止操作。用于防止成员信息泄露或超时处理等。 本文选自《微信企业号开发完全自学手册》。
页面有效期访问分为前台JS校验和后台时间校验,前台校验能够解决业务上的效果实现,而后台校验主要用于防止系统漏洞,增加系统安全性,应用场景如下:
场景一,成员薪资水平对于公司来说较为保密,减少员工之间不必要的薪资泄露是企业稳定的重要因素。因此当企业号作为企业服务,在引入人力资源系统时,薪资的页面查询,需要具有一定的时效性。当成员不慎未关闭页面时,为防止其他成员查看,可以在JS中加入时间控制,减少薪资等信息的泄露。
场景二,微信考勤打卡可以防止员工早退并提前打开考勤页面的情况下,回家进行微信考勤的漏洞。
场景三,在成员考勤补签、业务签收归档时,如果采用前台时间校验,则成员可以通过修改手机时间来实现信息的“逾期”处理或“预”处理,这时可以通过增加后台有效时间校验解决此类问题。
备注:建议在进行数据库操作时,同时使用JS校验和后台校验,这样方能够在实现客户体验的同时增加系统的安全性。
JS定时任务是前台有效期校验的一种方式,当成员在当前页面访问超时的时候,将进行安全跳转。其实现方式多种多样,既可以通过setTimeout实现,也可以通过setInterval实现,示例代码如下:
<html>
<head>
<title> JS定时任务校验</title>
</head>
<body>
倒计时:<span id="curTime"></span><br/>
基本工资:100000.00<br/>
绩效工资:50000.00<br/>
浮动工资:50000.00<br/>
总计:100000.00<br/>
<body>
<script>
var flag=60;
function timedCount(){
if(flag<0){
//超过有效事,页面跳转
location.href="http://www.baidu.com";
}else{
document.getElementById('curTime').innerHTML=flag;
flag--;
setTimeout("timedCount()",100);
}
}
//页面初始化执行
timedCount();
</script>
</html>
备注:setInterval() 方法是不停地调用函数,直到 clearInterval() 被调用或窗口被关闭,而setTimeout()是一定时间后执行“一次”函数。
事件校验,分为JS事件时间校验和后台session时间校验。当前台点击某个按钮时,能够通过JS获取本机时间进行校验。为了防止成员修改本机时间创建程序漏洞,因而增加后台时间校验,通过校验服务器时间来增加系统的安全性。
1 JS校验时间
当员工进行微信考勤,点击“考勤打卡”时,可校验员工是否长时间保持当前页面定位。如果超过有效时间,则需要员工重新获取定位后,方可以进行考勤。示例代码如下:
<html>
<head>
<title>JS时间校验</title>
</head>
<body>
当前GPS位置:<span id="curTime"></span><br/>
经度:101.60156187500003<br/>
纬度:35.603717439502084<br/>
<div onclick="regesiter()" style="background-color:red;width:100px">考勤打卡</div>
<body>
<script>
var flag=60; //有效值,单位秒
var beginTime=new Date();//初始化开始时间
function regesiter(){
/获取单击事件的当前时间
var endTime=new Date();
var temp=endTime.getTime()-beginTime.getTime();
if(temp>flag*1000){
alert("页面超时失效,需要重新刷新,是否刷新?");
return ;
}else{
//继续运行
alert("继续运行");
}
}
</script>
</html>
2 后台时间校验
后台校验主要用于防止成员通过修改本机时间,从而跳过JS时间验证的问题。在页面初始化时存入当前时间,示例代码如下:
request.getSession().setAttribute("bgTime", new Date());
当点击“考勤打卡”后,通过JS校验进入后台进行时间校验,示例代码如下:
long interval=60L;//阈值
Date bgTime = (Date) request.getSession().getAttribute("bgTime");
Date edTime = new Date();
if((edTime.getTime()-bgTime.getTime())>interval*1000L){
//重新设置,session
PrintWriter out = response.getWriter();
out.print("页面超时");
out.flush();
out.close();
}
备注:后台增加时间校验后,还需要进行JS校验是为了减少服务端压力。
本文分享自 博文视点Broadview 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!