js中利用cookie实现记住密码功能


Posted in Javascript onAugust 20, 2020

在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下:

HttpServletRequest request 
HttpServletResponse response
Cookie username = new Cookie("username ","cookievalue");
Cookie password = new Cookie("password ","cookievalue");
response.addCookie(username );
response.addCookie(password );

但是为安全起见,我们在后台获取的密码大多是在js中通过MD5加密后的密文,如果将密文放到cookie中,在js中获取到也没有作用;

然后考虑在js中存取cookie,代码如下:

//设置cookie
var passKey = '4c05c54d952b11e691d76c0b843ea7f9';
function setCookie(cname, cvalue, exdays) {
 var d = new Date();
 d.setTime(d.getTime() + (exdays*24*60*60*1000));
 var expires = "expires="+d.toUTCString();
 document.cookie = cname + "=" + encrypt(escape(cvalue), passKey) + "; " + expires;
}
//获取cookie
function getCookie(cname) {
 var name = cname + "=";
 var ca = document.cookie.split(';');
 for(var i=0; i<ca.length; i++) {
  var c = ca[i];
  while (c.charAt(0)==' ') c = c.substring(1);
  if (c.indexOf(name) != -1){
   var cnameValue = unescape(c.substring(name.length, c.length));
   return decrypt(cnameValue, passKey);
  } 
 }
 return "";
}
//清除cookie 
function clearCookie(cname) { 
 setCookie(cname, "", -1); 
}

setCookie(cname, cvalue, exdays)三个参数分别是存放的cookie名字、cookie值、cookie有效天数

由于cookie中不能包含等号、空格、分号等特殊字符,我在设置cookie时使用escape() 函数对字符串进行编码,获取cookie时使用unescape()函数解码。但是escape()函数不会对 ASCII 字母和数字进行编码,所以存放到cookie中的账号、密码是以明文存放的,不安全。于是上网找了一个对字符串加密解密算法,该算法需要传两个参数,一个需要加密的字符串,一个自定义加密密钥passKey。设置cookie时使用encrypt(value, passkey)加密,读取cookie时使用decrypt(value, passKey)解密,该算法附在本文最后。

存取cookie方法的调用:

1、定义checkbox

<input type="checkbox" id="rememberMe" checked="checked"/>记住密码 

2、判断帐号密码输入无误后调用

if($('#rememberMe').is(':checked')){
   setCookie('customername', $('#username').val().trim(), 7)
   setCookie('customerpass', $('#password').val().trim(), 7)
   }

3、进入登录界面后,判断cookie中是否有帐号密码,如果有就自动填充

$(function(){

 //获取cookie
 var cusername = getCookie('customername');
 var cpassword = getCookie('customerpass');
 if(cusername != "" && cpassword != ""){
 $("#username").val(cusername);
 $("#password").val(cpassword);
 }
}

最后附上字符串加密解密算法

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('A G(a,b){x(b==v||b.7<=0){D.y("z R P O");t v}6 c="";s(6 i=0;i<b.7;i++){c+=b.u(i).n()}6 d=m.r(c.7/5);6 e=l(c.9(d)+c.9(d*2)+c.9(d*3)+c.9(d*4)+c.9(d*5));6 f=m.M(b.7/2);6 g=m.B(2,C)-1;x(e<2){D.y("L K J z");t v}6 h=m.F(m.H()*N)%I;c+=h;w(c.7>q){c=(l(c.o(0,q))+l(c.o(q,c.7))).n()}c=(e*c+f)%g;6 j="";6 k="";s(6 i=0;i<a.7;i++){j=l(a.u(i)^m.r((c/g)*E));x(j<p){k+="0"+j.n(p)}Q k+=j.n(p);c=(e*c+f)%g}h=h.n(p);w(h.7<8)h="0"+h;k+=h;t k}A S(a,b){6 c="";s(6 i=0;i<b.7;i++){c+=b.u(i).n()}6 d=m.r(c.7/5);6 e=l(c.9(d)+c.9(d*2)+c.9(d*3)+c.9(d*4)+c.9(d*5));6 f=m.F(b.7/2);6 g=m.B(2,C)-1;6 h=l(a.o(a.7-8,a.7),p);a=a.o(0,a.7-8);c+=h;w(c.7>q){c=(l(c.o(0,q))+l(c.o(q,c.7))).n()}c=(e*c+f)%g;6 j="";6 k="";s(6 i=0;i<a.7;i+=2){j=l(l(a.o(i,i+2),p)^m.r((c/g)*E));k+=T.U(j);c=(e*c+f)%g}t k}',57,57,'||||||var|length||charAt||||||||||||parseInt|Math|toString|substring|16|10|floor|for|return|charCodeAt|null|while|if|log|key|function|pow|31|console|255|round|encrypt|random|100000000|the|change|plesae|ceil|1000000000|empty|be|else|cannot|decrypt|String|fromCharCode'.split('|'),0,{}))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax执行后台方法
Mar 18 Javascript
js字母大小写转换实现方法总结
Nov 13 Javascript
jQuery实现锚点scoll效果实例分析
Mar 10 Javascript
浅谈JavaScript中运算符的优先级
Jul 07 Javascript
js实现字符全排列算法的简单方法
May 01 Javascript
浅谈 Vue 项目优化的方法
Dec 16 Javascript
JS实现的透明度渐变动画效果示例
Apr 28 Javascript
JavaScript中的一些实用小技巧总结
Apr 07 Javascript
利用Vue实现一个markdown编辑器实例代码
May 19 Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 Javascript
微信小程序wxml列表渲染原理解析
Nov 27 Javascript
js实现抽奖功能
Nov 24 Javascript
JavaScript实现页面无操作倒计时退出
Oct 22 #Javascript
微信开发 消息推送实现代码
Oct 21 #Javascript
微信和qq时间格式模板实例详解
Oct 21 #Javascript
微信开发 微信授权详解
Oct 21 #Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
Oct 21 #Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 #Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
Oct 21 #Javascript
You might like
php接口数据加密、解密、验证签名
2015/03/12 PHP
JS 控制CSS样式表
2009/08/20 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
Python中的字符串替换操作示例
2016/06/27 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python 多线程中join()的作用
2020/10/29 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
骨干教师培训感言
2014/01/16 职场文书
在校生自我鉴定
2014/01/23 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
李强感恩观后感
2015/06/17 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers