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 确定css方框模型(盒模型Box Model)
Jan 22 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
Jul 17 Javascript
jQuery实现的placeholder效果完整实例
Aug 02 Javascript
微信小程序返回多级页面的实现方法
Oct 27 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
VUE路由动态加载实例代码讲解
Aug 26 Javascript
对layui初始化列表的CheckBox属性详解
Sep 13 Javascript
angular组件间通讯的实现方法示例
May 07 Javascript
在vue中使用console.log无效的解决
Aug 09 Javascript
Ajax实现局部刷新的方法实例
Mar 31 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代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
javascript 学习之旅 (3)
2009/02/05 Javascript
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
JS重载实现方法分析
2016/12/16 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Python实现图片添加文字
2019/11/26 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
上课说话检讨书500字
2014/11/01 职场文书
搞笑结婚保证书
2015/05/08 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python