JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍


Posted in Javascript onNovember 10, 2016

cookie是网站设计者放置在客户端(浏览器)的小文本文件,cookie不仅能够实现保存密码功能,还可以通过cookie保存最近浏览记录增加用户体验。

在登录界面添加记住密码功能,我首先想到的是在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,{}))

PS:下面看下js操作cookie的相关函数

//设置cookie函数,三个参数,一个是cookie的名子,一个是值,一个是设置cookie保存时间,单位:天
function SetCookie(name,value,days){
 var days=arguments[2]?arguments[2]:30; //此 cookie 将被保存 30 天
 var exp=new Date(); //new Date("December 31, 9998");
 exp.setTime(exp.getTime() + days*86400000);
 document.cookie=name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
//取cookies函数
function getCookie(name){
 var arr=document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
 if(arr!=null){
 return unescape(arr[2]);
 }
 return null;
}
//删除cookie函数
function delCookie(name){
 var exp = new Date();
 exp.setTime(exp.getTime() - 1);
 var cval=getCookie(name);
 if(cval!=null){
 document.cookie= name + "="+cval+";expires="+exp.toGMTString();
 }
}

以上所述是小编给大家介绍的JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript分页代码(当前页码居中)
Sep 20 Javascript
Ajax异步提交表单数据的说明及方法实例
Jun 22 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
jQuery is()函数用法3例
May 06 Javascript
iframe里使用JavaScript控制主页转向的方法
Apr 03 Javascript
javascript去除空格方法小结
May 21 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
全面详细的jQuery常见开发技巧手册
Feb 21 Javascript
JavaScript实现两个select下拉框选项左移右移
Mar 09 Javascript
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
使用Cargo工具高效创建Rust项目
Aug 14 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
Nov 10 #Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
Nov 09 #Javascript
通过bootstrap全面学习less
Nov 09 #Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
Nov 09 #Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 #Javascript
jQuery之动画效果大全
Nov 09 #Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 #Javascript
You might like
html静态页面调用php文件的方法
2014/11/13 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
限制复选框的最大可选数
2006/07/01 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
使用Python实现牛顿法求极值
2020/02/10 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
先进工作者获奖感言
2014/02/08 职场文书
公司承诺书范文
2014/05/19 职场文书
大气污染防治方案
2014/05/19 职场文书
出租房屋协议书
2014/09/14 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
2014年计生工作总结
2014/11/21 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
讲座新闻稿
2015/07/18 职场文书
教师理论学习心得体会
2016/01/21 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技