首页 > 其他分享 >网站验证码cookie,localStorage

网站验证码cookie,localStorage

时间:2023-11-02 14:23:04浏览次数:38  
标签:function localStorage tip 验证码 cookie let 1000

很多网站登录或则注册时,都会做一个利用手机号获取验证码证明为本人操作的选项。当然为了网站的web网站安全和防止信息炸弹等恶意操作,都会对再次获取验证码做一个倒计时,一般都为60s。而正常情况下只需利用JS定时函数很容易实现,这种情况下用户一旦刷新页面,页面dom中我们定义的js变量都会初始化,造成倒计时中断,而且未等倒计时结束又能发送短信。

上面的那种清空就涉及到数据持久性的问题,当然关于解决数据持久性的方案很多,例如常见的将数据存储到常规数据库,缓存数据库,session,cooike,localStorage,本地文本文件中等等。既然涉及JS前端,而cookie和localStorage又是JS的内置存储数据对象,所以对于上面的情况利用这两个方案分别实现一次

思路:

1.将倒计时的 总时间*1000+当前系统时间戳 存储到cookie或者localStorage中

2.当页面刷新,或重加载时如果cookie或者localStorage存在读取其中存储的值

3.利用当(前时间戳-读取的时间戳)/1000 等于剩余计时 秒数

 

缺点:当倒计时未结束时,用户手动删除了页面对应的cookie或者本地localStorage值时,再重新刷新页面

还是能够发送短信验证码。[不过对于这种情况,在调用后台接口时应该做二次验证,具体方案自行考究]

实现代码如下:

1.cookie实现

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>COOKIE实现页面倒计时刷新页面无影响</title>
</head>
<style>
#tip{
width:125px;
height:25px;
}

</style>
<body>
<div><button id='tip'">获取验证码</button></div>

</body>
<script type="text/javascript">
window.onload = function(){
var tip = document.getElementById('tip');
let ct = getCookie("codeTime");
if(ct && ct !="" && ct !=null){
tip.disabled = "true";
let d = new Date();
//用(设置的cookie时间戳-系统当前时间)/1000=剩余时间秒数
let sec = Math.round((ct-d.getTime())/1000);
countDown(tip,sec);
}
}

tip.onclick = function(){
let t = 60;
setCookie('codeTime',t,t);
countDown(tip,t);
}

//设置cookie,直接将失效时间设置为cookie的值
//将倒计时的秒数+当前时间戳设置为cookie值和cookie的有效时间

function setCookie(name,value,time){
let exp = new Date();
let val = exp.getTime()+value*1000;
exp.setTime(exp.getTime()+time*1000);
document.cookie = name+'='+val+';expires='+exp.toGMTString();
}

/**
* @param name [string] 要获取cookie名
* @return 如果存在则返回cookie的值,否则返回空
*/
function getCookie(name){
//获取所有cookie并且以';'为分割符,分割为数组
let cook = document.cookie.split(';');

//用indexOf()函数需要判断name第一次存在分割字符串的
//0位置需要拼接一个=,这样遍历时更精确
let cname = name+'=';

let len = cook.length;
//循环数组
for(let i=0;i<len;i++){
let ck = cook[i].trim();
//
if(ck.indexOf(cname)==0){
return (ck.split('=')[1]).trim();
//return ck.substring(cname.length,ck.length)
}
}
return '';
}


//倒计时
function countDown(obj,num) {
var tim = setInterval(function() {
num--;
obj.disabled = "true";
obj.innerHTML= num+'秒后失效';
if(num <= 0 ) {
clearInterval(tim);
obj.disabled = "";
obj.innerHTML= '重新发送';
}
}, 1000) //每1000毫秒=1秒执行一次
}

</script>

</html>
2.localStorage实现

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>localStorage实现页面倒计时刷新页面无影响</title>
</head>
<style>
#tip{
width:125px;
height:25px;
}

</style>


<body>
<div><button id='tip'">获取验证码</button></div>

</body>
<script type="text/javascript">
/**
* 将倒计时总时间*1000+当前时间戳存入到客户端本地内存中 localStorage
*/
window.onload = function(){
var tip = document.getElementById('tip');
if(get('codetime')){
let ct = get('codetime');
let num = Math.round((ct-new Date())/1000);
if(num>0){
tip.disabled = "true";
countDown(tip,num);
}
}
}

tip.onclick = function(){
let t = 60;
let st = new Date().getTime()+t*1000;
set('codetime',st);
countDown(tip,t);
}

//localStorage数据存取
function set(name,val){
localStorage.setItem(name, JSON.stringify(val));
}

//localStorage获取
function get(name){
return JSON.parse(localStorage.getItem(name));
}

//倒计时
function countDown(obj,num) {
var tim = setInterval(function() {
num--;
obj.disabled = "true";
obj.innerHTML= num+'秒后失效';
if(num <= 0 ) {
clearInterval(tim);
obj.disabled = "";
obj.innerHTML= '重新发送';
}
}, 1000) //每1000毫秒=1秒执行一次
}

</script>


</html>
————————————————
版权声明:本文为CSDN博主「愤怒的多啦A梦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lk1848621002/article/details/103191108

标签:function,localStorage,tip,验证码,cookie,let,1000
From: https://www.cnblogs.com/xzyyds233/p/17805293.html

相关文章

  • 纯前端实现图片验证码
    前言之前业务系统中验证码一直是由后端返回base64与一个验证码的字符串来实现的,想了下,前端其实可以直接canvas实现,减轻服务器压力。实现子组件,允许自定义图片尺寸(默认尺寸为100*40)与验证码刷新时间(默认时间为60秒)。同时暴露绘制验证码方法drawPic(),允许父组件直接调用(......
  • axum处理cookie
    Cookie是通过HTTPHeader进行传递的。由某个响应头进行设置,然后其它请求头就可以获取到了。本章将通过模拟用户中心来用axum操作HTTPHeader演示Cookie的读写操作。本章示例将实现以下路由:路由说明GET/用户中心首页。如果用户未登录,显示提示信息;如果用户已登......
  • HTTP 和 HTTPS(请求响应报文格式 + 请求方法 + 响应状态码 + HTTPS 加密流程 + Cookie
    文章目录   1.HTTP是什么   2.HTTP请求报文和响应报文的格式       1)请求报文格式       2)响应报文格式       3)报文中空行的作用   3.HTTP的长连接和短连接   4.URL       1)在浏览器中输入www.baidu.com后执行的全部过......
  • selenium+python,自动获取cookie登录
     一、通过cookie一直保持自动登录状态1.手动操作原理:保持自动登录状态1.通过cookie信息的唯一标识ID2.登录后一直保持不退出状态,就可以实现自动登录  登录后,session唯一标识:如果当前是登录状态,那就是登录。如果不是登录状态,就不是登录的。如何查看是否登录状态?浏览器......
  • selenium+python,登录有验证码的处理方式
    验证码的验证方式1.关闭验证码功能2.设置万能验证码3.通过第三方打码平台识别验证码 验证码图片获取提取验证码信息 验证码图片识别通过第三方平台1.超级鹰https://www.chaojiying.com/2.通过发送一个第三方的接口请求处理识别验证码http://upload.chaojiying.net/U......
  • python获取企业微信的验证码
    Python获取企业微信的验证码介绍在企业微信中,验证码是一种常见的安全验证方式,用于确认用户的身份。作为一名开发者,你需要掌握如何使用Python来获取企业微信的验证码。本文将为你详细介绍整个获取验证码的流程,并提供相应的代码示例。流程概述下面是获取企业微信验证码的整个流程......
  • 多平台cookie登录工具,提供源码和思路
    下面是界面: 下面是程序集代码:.版本2.支持库ietb.支持库spec.支持库iext.支持库eAPI.程序集窗口程序集_启动窗口.程序集变量页面,谷歌页面.程序集变量ccookiesA,文本型,,"0".子程序_按钮1_被单击.局部变量是否成功,逻辑型.局部变量谷歌浏览器路径......
  • FastAPI学习-21.response 参数-设置响应Cookies
    前言可以在 路径函数 中定义一个类型为 Response的参数,这样你就可以在这个临时响应对象中设置cookie了。response参数设置cookiesfromfastapiimportFastAPI,Responseapp=FastAPI()@app.post("/cookie-and-object/")defcreate_cookie(response:Response):res......
  • 登录页面--图片验证码
    登陆界面实现图片验证码功能 开始吧!!!如何生成图片呢安装pillow模块pipinstallpillow新建myproject/app01/utils/ttf目录,将字体放在其下新建myproject/app01/utils/code.py,编辑验证码生成函数fromPILimportImage,ImageDraw,ImageFilter,ImageFontimpor......
  • Vue localStorage 将数据存为数组
    VuelocalStorage将数据存为数组要把表单数据存成数组形式,在另一个页面通过v-for渲染展示,因为拥有同一个key值,在每次更新表单数据时都会发生数据覆盖现象。vartemplist=JSON.parse(localStorage.getItem("msgBody")||"[]");templist.push(this.msgBody);......